javascript - 根据特定值拆分字符串,但保留分隔符,但这样做时不要将它们附加到任何东西上

标签 javascript regex

我到处都找过,但似乎没有解决方案可以解决这个问题。 假设我得到了一个带有如下文本的字符串:

jx():{ww.}55<<;<5<>=-[]+*/"hrw  7 n t";fizz buzz

我想把这个字符串分割成一个数组,所以它看起来像这样(逗号表示不同的数组位置:

"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"]

正如您所看到的,“ww”与 } 位于相同的位置,并且最后您可以看到分号与 fizzuzz 位于相同的数组位置,但不会进入单独的位置。

规则如下。在任何空格上拆分,但保留引号之间的空格。按 {, }, (, ), %, <<, <,>,-,+,=,||,&&,!,?,:,;. 拆分,或按引号拆分,以便整个文本在引用将是一个数组位置。

编辑:我相信我发现了问题。正则表达式正在检测结束引号和开始引号之间以及引号中的单词。例子: “嘶嘶声”和“嗡嗡声” 从技术上讲, and 位于两个报价之间,返回 "和 "的值 我该如何解决这个问题?

感谢任何帮助。谢谢!

最佳答案

直接匹配您想要的事物通常比分割它们之间的事物容易得多。

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

关于javascript - 根据特定值拆分字符串,但保留分隔符,但这样做时不要将它们附加到任何东西上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49136006/

相关文章:

python - 如何仅删除字符串中单个单词周围的括号

javascript - jQM ui-content 100%高度问题

javascript - OrientDB Studio 中的函数 - 正确的语法是什么?

javascript - Reactjs,发送和读取变量

Javascript:元素请求的属性

python - 正则表达式:在计算中提取功率

javascript - 如何在 react 节点 js 项目中从客户端创建动态元标记?

regex - 正则表达式除最后一个字符外的所有字符

javascript - 完全限制输入字段的输入

c - sscanf 中的正则表达式有长度限制