javascript - 如何在 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
解决方案
您必须重置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
很有用,否则,如果您不需要,请不要使用g
lobal 标志。
推荐阅读
- javascript - HTML:我应该将样式放在内部元素还是周围的 div 元素上?
- java - Glassfish 5.1 无法添加资源
- c# - 用于创建通讯组列表的 Outlook 加载项(实时和桌面)
- javascript - 从动态生成的下拉菜单中删除一个选项
- python - Pandas 从列中获取唯一值,并且仅有效地获取最新日期
- obfuscar - asp.net core 3.1 的混淆器
- python-3.x - 调用位于另一个类的方法中的变量(Tkinter)
- java - 一遍又一遍地调用read方法时,FileInputStream类是如何知道偏移量的呢?
- php - 从cron执行的php脚本表现得很奇怪
- datetime - 是否有从不同日期选择一组小时的功能?