Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.2k views
in Technique[技术] by (71.8m points)

regex - javascript split string by space, but ignore space in quotes (notice not to split by the colon too)

I need help splitting a string in javascript by space (" "), ignoring space inside quotes expression.

I have this string:

var str = 'Time:"Last 7 Days" Time:"Last 30 Days"';

I would expect my string to be split to 2:

['Time:"Last 7 Days"', 'Time:"Last 30 Days"']

but my code splits to 4:

['Time:', '"Last 7 Days"', 'Time:', '"Last 30 Days"']

this is my code:

str.match(/(".*?"|[^"s]+)(?=s*|s*$)/g);

Thanks!

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
s = 'Time:"Last 7 Days" Time:"Last 30 Days"'
s.match(/(?:[^s"]+|"[^"]*")+/g) 

// -> ['Time:"Last 7 Days"', 'Time:"Last 30 Days"']

Explained:

(?:         # non-capturing group
  [^s"]+   # anything that's not a space or a double-quote
  |         #   or…
  "         # opening double-quote
    [^"]*   # …followed by zero or more chacacters that are not a double-quote
  "         # …closing double-quote
)+          # each match is one or more of the things described in the group

Turns out, to fix your original expression, you just need to add a + on the group:

str.match(/(".*?"|[^"s]+)+(?=s*|s*$)/g)
#                         ^ here.

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

56.8k users

...