正则表达式由引号和加号分开

时间:2012-11-20 16:19:04

标签: javascript regex split

我正在尝试使用某些字符作为运算符从文本框中拆分文本。我有一个分组运算符(“)和一个”AND“运算符(+),就像谷歌一样。所以,这个文本:

box +box +"box" "box" "is.a.box" +"is.a.box" +"is a box"

在文本框中返回:

myArray[0] = box
myArray[1] = +box
myArray[2] = +
myArray[3] = "box"
myArray[4] = "box"
myArray[5] = "is.a.box"
myArray[6] = +
myArray[7] = "is.a.box"
myArray[8] = +
myArray[9] = "is a box"

相反,我希望它返回:

myArray[0] = box
myArray[1] = +box
myArray[2] = +"box"
myArray[3] = "box"
myArray[4] = "is.a.box"
myArray[5] = +"is.a.box"
myArray[6] = +"is a box"

这是我正在使用的正则表达式:

/[\+\w]+|"[^"]+"/g

如何将“和+符号分开?”

3 个答案:

答案 0 :(得分:4)

看看这个:

str.match(/\+?(?:"[^"]*"|[^\s+]+)/g)

如果可能的话,这将从+开始。然后它会尝试匹配"。如果可以,则需要尽可能多的非"字符和最终"字符。如果没有",则只会收集尽可能多的非空格,非+个字符。

这几乎就是你所拥有的,除了我在两种可能的情况下都选择了+

还有一个补充。如果box"box"应该导致两个匹配box"box",请使用:

str.match(/\+?(?:"[^"]*"|[^\s+"]+)/g)

答案 1 :(得分:3)

/\+?("[^"]*"|[^\s+])+/g

诀窍是将引用的字符串视为单个字符。我们查看非空格,非特殊字符([^\s+]),但我们也会假装引用的字符串("[^"]*")是一个字符。

> 'box +box +"box" "box" "is.a.box" +"is.a.box"'.match(/\+?("[^"]*"|[^\s+])+/g)
  ["box", "+box", "+"box"", ""box"", ""is.a.box"", "+"is.a.box""]

> '"string with spaces" +"extended phrase"'.match(/\+?("[^"]*"|[^\s+])+/g)
  [""string with spaces"", "+"extended phrase""]

> 'box+box'.match(/\+?("[^"]*"|[^\s+])+/g)
  ["box", "+box"]

答案 2 :(得分:0)

您可以通过简单的空格分割来实现您想要的结果。

您可能希望使其更智能,并使用以下内容折叠多个空格:

myArray = str.split(/[\s]+/g)

对于输入字符串,这将返回您想要的数组:

["box", "+box", "+"box"", ""box"", ""is.a.box"", "+"is.a.box""]