前瞻不匹配,除非字符串中包含方括号

时间:2018-08-31 19:35:15

标签: javascript regex

我正在使用此否定前瞻搜索单个行字符串:

/\s+(?![^[]*]).+/g

这与以下两项均匹配:

// String 1
a.casd-234[test='asfd asdf'] abc defg

// String 2
asf.one.two.three four five six

这将返回abc defgfour five six

我尝试编写快递以获取文本(a.casd-234[test='asfd asdf']asf.one.two.three)之前的值:

/.+(?<=[^[]*])\s/g

这在字符串1上有效,但在字符串2上却无效,因为它找不到任何东西,因为字符串中没有[]字符。

使用此后置镜头,我在做什么?

1 个答案:

答案 0 :(得分:1)

您正在使用正则表达式从某个点到其末端匹配一个字符串(正则表达式末尾的.+会这样做,匹配换行符以外的1个以上字符,直到行/字符串的结尾。

因此,最简单的解决方案是通过.replace方法使用相同的模式:

var rx = /\s+(?![^[]*]).+/;
console.log("a.casd-234[test='asfd asdf'] abc defg".replace(rx, ''));
console.log("asf.one.two.three four five six".replace(rx, ''));

请注意,此处不需要g修饰符,因为您只需要替换一次即可。如果字符串可能包含多行,请用.[^]替换每个[\s\S]