RegEx:使用/ i vs. / g(/ g替换空格但/ i不替换)

时间:2018-06-13 03:54:50

标签: javascript regex

我想要一个只包含字母的数组(我正在编写一个函数来检查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错误吗?

2 个答案:

答案 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

然后你可以分开它。