为什么test.matchAll(/\+\+\+\+/gm)匹配3个+时if判断返回true
原因说明
- 首先要明确
String.prototype.matchAll()的返回规则:只要传入的参数是合法的正则表达式,不管有没有匹配到结果,方法都会始终返回一个非空的迭代器对象,不会返回null、undefined这类假值。 - JavaScript的
if判断会对括号内的值做隐式布尔类型转换:所有非null、非undefined、非0、非空字符串、非NaN的对象,转换结果都是true。 - 你这段代码里的正则
/\+\+\+\+/gm是合法的,所以test.matchAll(regex)执行后返回的迭代器对象在if判断中被转为true,自然就会触发alert(true)。
正确判断是否匹配的写法
如果要实际判断正则有没有命中内容,需要把迭代器转为数组后检查长度,示例如下:
const regex = /\+\+\+\+/gm; let test = `+++` // 先把迭代器展开为数组,再判断数组长度 if ([...test.matchAll(regex)].length) { alert(true) } else { alert(false) }
上面的代码会正确弹出false,因为你的正则需要匹配4个连续的+,但测试字符串里只有3个,没有匹配结果。
内容的提问来源于stack exchange,提问作者user310291
相关产品推荐
相关产品推荐

