我阅读了许多帖子,发现JS regex不支持look-behind
。我是否仍可以通过这种方式来排除匹配项,该匹配项是等于或等于或等于或等于或等于或等于的符号?
到目前为止,我得到的是\s+|,|\(|\)|(?! \s*?=)
此正则表达式将匹配所有分隔符,例如任意数量的空格“,”,“(”或“)”,但不适用于我要排除{{1之前或之后的所有空格的最后一部分}}符号。
所以我做=
的那一刻,就是地狱爆发。但是,我可以看到,如果仅将(?! \s*?=)
与管道一起使用,则它实际上与\s*?=
相匹配。
有没有办法我仍然可以在javascript中做到这一点?
示例(通过将正则表达式与any equal symbols with any number of spaces in front or after it
一起使用)
输入字符串:
STRING.split(regexrulehere)
预期输出:
my-app command, arg1 arg2 arg3 =val1, arg4 = val2)
答案 0 :(得分:2)
输入字符串中=
周围有空格,并且不能期望在单个arg4=val2
之后得到split
(无空格)。
通过两个“正则表达式”步骤进行操作:
s = s.replace(/\s*=\s*/g, '=').match(/[^\s,()]+/g)
\s*=\s*
匹配任何0+空格,=
和0+空格,并且此replace
删除=
周围的所有空格。由于.match(/[^\s,()]+/g)
是negated character class,,
将提取除空格,(
,)
和[^...]
字符以外的所有1+个字符的块。 / p>
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)
必须删除空白元素(如有)。
答案 1 :(得分:0)
正如您指出的那样,包括空格字符也可以,另一个选择可能是使用否定字符类[^\s(),=]+
不匹配括号,逗号,等号或空格字符。
然后在匹配项后面跟随一个可选部分(?:....)?
,该部分匹配由空格字符包围的等号,并再次使用否定的字符类:
[^\s(),=]+(?:\s*=\s*[^\s(),=]+)?