我阅读了很多帖子,发现look-behindJS 正则表达式似乎不支持。有没有办法我仍然可以排除匹配,即任何相等的符号前面或后面有任意数量的空格?到目前为止,我得到的是\s+|,|\(|\)|(?! \s*?=) 这个正则表达式将匹配所有分隔符,如任意数量的空格、“、”、“(”或“)”,但在我想排除之前找到的任何空格的最后部分无法正常工作或在一个=符号之后。所以我做的那一刻(?! \s*?=)就是地狱爆发的时候。但是,我可以看到,如果我只是使用\s*?=管道,它实际上匹配any equal symbols with any number of spaces in front or after it.沙箱:https : //regexr.com/4fgop有没有办法我仍然可以在javascript中做到这一点?示例(通过使用正则表达式 with STRING.split(regexrulehere))输入字符串: my-app command, arg1 arg2 arg3 =val1, arg4 = val2)预期输出:['my-app','command','arg1','arg2','arg3=val1', // or `arg3 =val1` is fine as well'arg4=val2', // or `arg4 = val2` is fine as well]
2 回答
慕标5832272
TA贡献1966条经验 获得超4个赞
您=
在输入字符串中有空格,并且您不能期望arg4=val2
在单个split
.
分两个“正则表达式”步骤:
s = s.replace(/\s*=\s*/g, '=').match(/[^\s,()]+/g)
在\s*=\s*
任何0+空格,匹配=
和0+空格,而且这replace
周围删除所有空格=
。.match(/[^\s,()]+/g)
将提取的除空白,1+字符,所有组块,
,(
并且)
字符作为[^...]
是一个否定的字符类。
JS演示:
var s = "my-app command, arg1 arg2 arg3=val1, arg4=val2)"; console.log(s.replace(/\s*=\s*/g, '=').match(/[^\s,()]+/g));
如果要拆分,请使用
s.replace(/\s*=\s*/g, '=').split(/[\s,()]+/).filter(Boolean)
请注意,filter(Boolean)
如果有空元素,则需要删除。
添加回答
举报
0/150
提交
取消