我正在使用此否定前瞻搜索单个行字符串:
/\s+(?![^[]*]).+/g
这与以下两项均匹配:
// String 1
a.casd-234[test='asfd asdf'] abc defg
// String 2
asf.one.two.three four five six
这将返回abc defg
和four five six
我尝试编写快递以获取文本(a.casd-234[test='asfd asdf']
,asf.one.two.three
)之前的值:
/.+(?<=[^[]*])\s/g
这在字符串1上有效,但在字符串2上却无效,因为它找不到任何东西,因为字符串中没有[
和]
字符。
使用此后置镜头,我在做什么?
答案 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]
。