为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

我阅读了很多帖子,发现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)如果有空元素,则需要删除。


查看完整回答
反对 回复 2021-06-24
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

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

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

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

正则表达式演示


查看完整回答
反对 回复 2021-06-24
  • 2 回答
  • 0 关注
  • 254 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信