JavaScript 正则、日期、错误处理与 JSON 操作全解析
1. 正则表达式中的陷阱与解决方案
在 JavaScript 里,使用正则表达式时可能会遇到一些隐藏的问题。比如下面这段代码:
let doubleLetter = /(\w)\1/g;
for(let word of dictionary) {
if (doubleLetter.test(word)) {
doubleLetterWords.push(word);
}
}
doubleLetterWords // => ["apple", "coffee"]: "book" is missing!
这里我们想要找出字典里包含连续重复字母的单词,但结果中“book”却缺失了。这是因为我们给正则表达式设置了 g 标志,成功匹配后 lastIndex 属性会改变, test() 方法(基于 exec() )会从 lastIndex 指定的位置开始搜索。匹配“apple”里的“pp”后, lastIndex 变为 3,搜索“book”时就从位置 3 开始,从而错过了“oo”。
解决这个问题有几种办法:
- 移除 g 标志(在这个例子中其实不需要)。
- 把正则表达式字面量移到循环体内部,这样每次迭代都会重新创建。
- 每次调用
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



