我想要一个只包含字母的数组(我正在编写一个函数来检查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错误吗?
答案 0 :(得分:1)
您没有将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的。
答案 1 :(得分:1)
/[^a-z]+/i
匹配[空格] [。] 第一场比赛 [空格]
当你这样做时
s.replace(/[^a-z]+/i, "")
提供'Thequick brown fox jumps over the lazy dog.'
length = 43
/[^a-z]+/g
[T] [空格] [。] 全球匹配
此处缺少资本 T
提供"hequickbrownfoxjumpsoverthelazydog"
length = 34
所以你需要使用这两个标志,因为你想要匹配大写T 。
/[^a-z]+/gi
[空格] [。] 匹配全局不区分大小写
s.replace(/[^a-z]+/gi, "")
提供所需的字符串
"Thequickbrownfoxjumpsoverthelazydog"
length = 35
然后你可以分开它。