我想要一个只包含字母的数组(我正在编写一个函数来检查 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
相同的代码会得到一个包含字母以及 quick 和 brown 之间的空格的数组 (lettersArr.length = 43
)。由于 /i
只是不区分大小写,他们不应该给出相同的结果吗?这只是一个 RegEx 或 Javascript 错误吗?
最佳答案
/[^a-z]+/i
匹配 [space][.] First Match 即 [space]
当你这样做的时候
s.replace(/[^a-z]+/i, "")
给出 'Thequick brown fox jumps over the lazy dog.'
length = 43
/[^a-z]+/g
[T][space][.] 全局匹配
Capital T is missing here
给出 "hequickbrownfoxjumpsoverthelazydog"
length = 34
所以你需要同时使用这两个标志,因为你也想匹配 capital T。
/[^a-z]+/gi
[space][.] 全局匹配不区分大小写
s.replace(/[^a-z]+/gi, "")
给出想要的字符串
“Thequickbrownfoxjumpsoverthelazydog”
length = 35
之后你可以拆分它。
关于javascript - 正则表达式:使用/i vs./g(/g 替换空格但/i 不替换),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50828847/