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

我阅读了很多帖子,发现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

]


慕尼黑的夜晚无繁华
浏览 255回答 2
2回答

慕标5832272

您=在输入字符串中有空格,并且您不能期望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)如果有空元素,则需要删除。

Smart猫小萌

正如您所说的,包括空格字符也可以,另一种选择可能是不匹配括号、逗号、等号或使用否定字符类的空格字符[^\s(),=]+。然后通过一个可选部分(?:....)?来匹配匹配,该部分匹配由空格字符包围的等号,并再次使用否定字符类:[^\s(),=]+(?:\s*=\s*[^\s(),=]+)?正则表达式演示
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript