JS匹配非字符串
众所周知,[^div]
匹配的是“非字符”而不是“非字符串”,前者的意思是一个字符串里只要没有d
、i
、v
这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');