我到处寻找,但似乎没有解决方案可以解决这个问题。 说我给了一个带有这样文字的字符串:
jx():{ww.}55<<;<5<>=-[]+*/"hrw 7 n t";fizz buzz
我想把这个String拆分成一个数组,所以它看起来像这样(逗号表示不同的数组位置:
"jx","(",")",":","{","ww",".","}","55","<<",";","<","5","<",">","=","-","[","]","+","*","/","hrw 7 n t",";","fizz","buzz"
这是我的正则表达式,我使用?=来保留分隔符或任何你想要它们调用它们,每当我这样做时,它确实保留了分隔符,如果另一个字符直接在分隔符后它没有分隔分隔符它,或者只是有时,我看了其他解决方案,我尝试过的所有解决方案都给了我相同的结果:
str=str.split(/(?=".*")|(?=[(){}\[\]<>:;.\=\-\*\+\/])|(?=\s{2,})|(?=[0-9]+)/)
如果我把上面的文字放在正则表达式中,我得到:
["jx", "(", ")", ":", "{ww", ".", "}", "5", "5", "<", "<", ";", "<", "5", "<", ">", "=", "-", "[", "]", "+", "*", "/", "\"hrw", " ", "7 n t\"", ";fizz buzz"]
如你所见,&#34; ww&#34;与}}处于同一位置,最后你可以看到分号与fizz buzz处于相同的阵列位置,不会进入单独的位置。
规则如下。在任何空格上拆分但保留引号之间的空格。拆分{,},(,),%,&lt;&lt;,&lt;,&gt;, - ,+,=,||,&amp;&amp;,!,?,:,;。或拆分为引用使得引号之间的整个文本将是一个数组位置。
编辑:我相信我发现了问题。正则表达式正在检测结束和开始语态之间的单词,也在引用中。例: &#34;香味&#34;和&#34; buzz&#34; 从技术上讲,介于两个引用之间,返回&#34;和&#34; 我该如何解决这个问题?
感谢任何帮助。谢谢!
答案 0 :(得分:1)
直接match
你想要的东西通常比split
他们之间的东西容易得多。
var str = 'jx():{ww.}55<<;<5<>=-[]+*/"hrw 7 n t";fizz buzz';
var regex = /"[^"]*"|<<|&&|\|\||\(|\)|\{|\}|\[|\]|<|>|:|;|\.|=|-|\*|\+|\/|\w+/g;
console.log(str.match(regex));
如果你想避免将引号作为匹配的一部分,你可以做一些复杂的外观,但是更容易对数组进行后期处理并删除引号(例如.map(x => x.replace(/^"|"$/g, ""))
或.map(x => x[0]=='"' ? x.slice(1,-1) : x)
)。