繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM