这个正则为什么一下是 true 一下是 false?

2016-10-07 15:53:09 +08:00
 Nbsaw

这是我在 Chrome 控制台下的测试



这是我在 Java 运行的结果

正则表达式如下:

var hyphenateRE = /([^-])([A-Z])/g;

为什么会这样?求解答

1692 次点击
所在节点    问与答
6 条回复
laoyur
2016-10-07 16:04:33 +08:00
虽然我对具体的 api 不熟,但你显然两个环境用的是不同的 API ,一个是 test(),一个是 matches()
hronro
2016-10-07 16:07:47 +08:00
这是因为在 JS 中, RegExp 实例拥有的 test 方法,会从上次匹配字符串结束的地方开始匹配。第一次匹配完"-AB",后,第二次匹配会从'B'之后再开始匹配,自然就匹配不到了
w88975
2016-10-07 16:26:03 +08:00
每次正则匹配完 加一个
hyphenateRE.lastIndex = 0
w88975
2016-10-07 16:26:53 +08:00
hyphenateRE.test('-AB');
hyphenateRE.lastIndex = 0;
hyphenateRE.test('-AB');
ZhaoMiing
2016-10-07 16:29:25 +08:00
ls+1
prefere
2016-10-07 18:09:08 +08:00
g 修饰符用于执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
http://www.w3school.com.cn/jsref/jsref_regexp_g.asp

把 g 去掉,这样无论多少次都是 true
var hyphenateRE = /([^-])([A-Z])/;

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/310967

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX