[英]RegEx: Using /i vs. /g (/g replaces whitespace but /i doesn't)
我想要一个只包含字母的数组(我正在编写一个函数来检查pangrams)。 使用/g
代码给我一个只有字母和没有空格的数组( lettersArr.length = 34
):
var s = "The quick brown fox jumps over the lazy dog."
var lettersArr = s.replace(/[^a-z]+/i, "").split("");
console.log(lettersArr);
但是,使用与/i
相同的代码给出了一个包含字母的数组以及快速和棕色之间的空格( lettersArr.length = 43
)。 既然/i
只是不区分大小写,那么它们不应该给出相同的结果吗? 这只是一个RegEx或Javascript错误吗?
你没有将g
标志添加到正则表达式,所以它只替换第一个匹配,在你的情况下是第一个空格字符。
如果你添加g
标志,它的工作原理是:
var s = "The quick brown fox jumps over the lazy dog."
var lettersArr = s.replace(/[^a-z]+/gi, "").split("");
console.log(lettersArr);
使用g
标志意味着.replace
不会在第一场比赛时停止。
请注意,如果没有i
,阵列的长度应为35,而使用i
34,所以我不确定你是如何获得26或28的。
/[^az]+/i
匹配[空格] [。] 第一场比赛是[空间]
当你这样做
s.replace(/[^a-z]+/i, "")
给'Thequick brown fox jumps over the lazy dog.'
length = 43
/[^az]+/g
[T] [space] [。] 匹配全球
这里缺少Capital T.
给出"hequickbrownfoxjumpsoverthelazydog"
length = 34
所以你需要使用两个标志,因为你也想匹配大写字母T.
/[^az]+/gi
[space] [。] 匹配全局不区分大小写
s.replace(/[^az]+/gi, "")
提供所需的字符串
"Thequickbrownfoxjumpsoverthelazydog"
length = 35
之后你可以拆分它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.