javascript - 为什么javascript RegExp测试函数每次与标志一起使用时都会给出不同的结果?
问题描述
如果我使用 RegExp test(),它会第一次给出正确的答案,但之后它会返回相反的结果(如果找到匹配项),如果不是,则返回 false:
let regex = new RegExp('bird|dog', 'g')
console.log(regex.test('Imma bird')) // output: true
console.log(regex.test('Imma dog')) // output false !
console.log(regex.test('Imma dog')) // output true
console.log(regex.test('Imma bird')) // output false !?
console.log(regex.test('Imma bird')) // output true
console.log(regex.test('Imma bird')) // output false ??
console.log(regex.test('Imma believer')) // output false
console.log(regex.test('Imma believer')) // output false
console.log(regex.test('Imma believer')) // output false
如果我不使用 'g' 限定符,一切都会按预期工作:
let regex = new RegExp('bird|dog')
console.log(regex.test('Imma bird')) // output true
console.log(regex.test('Imma bird')) // output true
console.log(regex.test('Imma believer')) // output false
console.log(regex.test('Imma believer')) // output false
显然,这里有一些我不明白的地方。但是什么?
解决方案
该g
标志告诉RegExp
对象记住最后一次匹配的位置,并在下次尝试匹配(或测试,在这种情况下)时从那里恢复。
推荐阅读
- javascript - 将包含 window 的函数传递给子 iframe 时,window 的值引用父窗口,而不是子窗口
- python-3.x - 如何使用多处理或多线程加速此循环?
- javascript - 复选框值返回并添加到字符串
- python - SOAP 调用响应只得到最后一个结果 - Python
- javascript - TypeError: firebase.analytics is not a function when mocking with jest
- html - 如何将视频插入到 HTML 文本中?
- java - JSF 列表取决于返回 nullPointer 的选定值
- java - 使用 BufferReader '\n' 读取后不会被接受为换行符,如何解决这个问题?
- python - 新项目 :: adv. 通讯录,但我遇到了一些问题
- java - SOAP WsSecurity 数字签名使用 CXF 和 WSS4J for X509Certificate