拆分特定值的字符串,但保留分隔符,但在做的时候不要把它们留在任何东西上

时间:2018-03-06 16:47:47

标签: javascript regex

我到处寻找,但似乎没有解决方案可以解决这个问题。 说我给了一个带有这样文字的字符串:

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; 我该如何解决这个问题?

感谢任何帮助。谢谢!

1 个答案:

答案 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))。