如何编写匹配多个分隔符的正则表达式命令,包括任意数量的空格,但不包括等号之间的空格



我读了很多帖子,发现 JS 正则表达式似乎不支持look-behind。有没有办法我仍然可以排除匹配的部分,即任何相等的符号,前面或后面有任意数量的空格?

到目前为止,我得到的是s+|,|(|)|(?! s*?=)这个正则表达式将匹配所有分隔符,如任意数量的空格",","("或"(",但在我想排除在=符号之前或之后找到的任何空格的最后一部分无法正常工作。

所以我做(?! s*?=)的那一刻就是所有地狱爆发的时候。但是,我可以看到,如果我只是将s*?=与管道一起使用,它实际上与any equal symbols with any number of spaces in front or after it匹配。

沙盒:https://regexr.com/4fgop

有没有办法我仍然可以在javascript中做到这一点?

示例(通过将正则表达式与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
]
输入

字符串中=周围有空格,并且不能期望在单个split后获得arg4=val2(没有空格(。

分两个"正则表达式"步骤完成:

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)

正如您所说,包括空格字符也可以,另一种选择可能是不使用否定字符类[^s(),=]+匹配括号、逗号、等号或空格字符。

然后在匹配后跟一个可选部分(?:....)?该部分匹配由空格字符包围的等号,并再次使用否定字符类:

[^s(),=]+(?:s*=s*[^s(),=]+)?

正则表达式演示

相关内容

最新更新