首页 > 解决方案 > 如何在 javascript 中使用正则表达式模式 \W

问题描述

我有一个用于匹配特殊字符的正则表达式模式

ptr = /\W|_/g 

它适用于每个特殊字符,除了*

这是我的测试结果

ptr = /\W|_/g
ptr.test('vbk_')
true
ptr.test('vbk*')
false
ptr.test("Select * from user")
true
ptr.test("Select * from user")
true
ptr.test("Select * from user")
true
ptr.test('vbk*')
false

当我从模式中删除 global( g) 时,它似乎工作正常,任何人都可以告诉我为什么会发生这种情况

这是我的测试结果:

ptr = /\W|_/
ptr.test('vbk*')
true
ptr.test('vbk')
false
ptr.test('Select * from user')
true

标签: javascriptregexpattern-matching

解决方案


您必须重置lastIndex或重新初始化正则表达式模式。

发生这种情况是因为在使用g(global) 时,有一个称为lastIndex最后匹配索引的值。当重用你的正则表达式的同一个实例时,搜索将从那里继续。

> ptr = /\W|_/g
/\W|_/g
> ptr.test('vbk*')
true
> ptr.lastIndex
4
> ptr.lastIndex = 0
0
> ptr.test('vbk*')
true

另一种方法是有一个返回正则表达式值的函数:

> ptr = () => /\W|_/g
[Function: ptr]
> ptr().test("vbk*")
true
> ptr().test("vbk*")
true
> ptr().test("vbk*")
true
> ptr().test("vbk*")
true

如果您需要从特定索引开始搜索,这lastIndex很有用,否则,如果您不需要,请不要使用global 标志。


推荐阅读