js正则匹配“非字符串”
本文由 小茗同学 发表于 2016-07-22 浏览(1439)
最后修改 2019-06-18 标签:javascript 正则 表达式 匹配 非字符串

JS匹配非字符串

众所周知,[^div]匹配的是“非字符”而不是“非字符串”,前者的意思是一个字符串里只要没有div这3个字符就算符合条件,但是很多时候我们需要匹配没有div这一个字符串,这时该怎么办呢?

方法一

匹配不以abc开头的字符串:

/^([^a]|a[^b]|ab[^c]).*/g.exec('abcfdsf');

匹配不以abc或者qwe开头的字符串:

// 正确写法:
/^([^aq]|a[^b]|ab[^c]|q[^w]|qw[^e]).*/g.exec('abcfdsf');

// 错误写法:因为`[^a]|[^q]`已经相当于匹配任意字符了,所以必须写在一起。
/^([^a]|[^q]|a[^b]|ab[^c]|q[^w]|qw[^e]).*/g.exec('abcfdsf');

方法二

/^((?!abc|123).)*$/.test('abc hello'); // false, 匹配不包含 abc 或者 123 的字符串

注意以下是错误写法:

/^(.(?!abc|123))*$/.test('abc hello'); // true, 注意这种写法不能规避字符串开头的情况

匹配不以abc开头的字符串:

/^(?!abc)/.test('abcfdsf');

匹配不以abc或者qwe开头的字符串:

/^(?!abc|qwe)/.test('abcfdsf');