我目前有一个正则表达式,用于按所有空格拆分字符串,除非它在带引号的段中:
keywords = 'pop rock "hard rock"';
keywords = keywords.match(/\w+|"[^"]+"/g);
console.log(keywords); // [pop, rock, "hard rock"]
但是,我也希望关键字中可以有引号,如下所示:
keywords = 'pop rock "hard rock" "\"dream\" pop"';
这应该会返回
[pop, rock, "hard rock", "\"dream\" pop"]
实现这一目标的最简单方法是什么?
发布于 2010-10-27 19:19:16
您可以将正则表达式更改为:
keywords = keywords.match(/\w+|"(?:\\"|[^"])+"/g);
您可以使用(?:\\"|[^"])+
代替[^"]+
,它允许使用\"
或其他字符,但不允许未转义的引号。
一个重要的注意事项是,如果您希望字符串包含文字斜杠,它应该是:
keywords = 'pop rock "hard rock" "\\"dream\\" pop"'; //note the escaped slashes.
此外,\w+
和[^"]+
之间有一点不一致-例如,它将匹配单词"ab*d"
,但不匹配ab*d
(不带引号)。考虑使用[^"\s]+
,它将匹配非空格。
发布于 2017-01-05 23:26:32
我想指出的是我和你有相同的正则表达式,
/\w+|"[^"]+"/g
但是它不能处理空的带引号的字符串,比如:
"" "hello" "" "hi"
因此,我必须将+量词改为*。这给了我:
str.match(/\w+|"[^"]*"/g);
这很好。
https://stackoverflow.com/questions/4031900
复制相似问题