我正在尝试使用某些字符作为运算符从文本框中拆分文本。我有一个分组运算符(“)和一个”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
如何将“和+符号分开?”
答案 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""]