如何理解这个正则?


function isPangram(string){
  return (string.match(/([a-z])(?!.*\1)/ig) || []).length === 26;
}

/([a-z])(?!.*1)/ig,这个正则该如何理解?

阅读 2.3k
4 个回答

ig 全局匹配忽略大小写
[a-z] 匹配26个英文字母中的任意1个
\1 表示第一个括号匹配的模式,这里即第一个圆括号匹配的字母
?! 正向否定查找,当后面不是.*\1时匹配这个字符,即当a后面的串里没有a则匹配这个a.

整体下来就是,忽略大小写看不重复字母个数是否是26个。

x(?!y)
//  仅匹配不被y跟随的x。
//  举个例子,/\d+(?!\.)/ 只会匹配不被点(.)跟随的数字。
//  /\d+(?!\.)/.exec('3.141') 匹配"141",而不是"3.141"

\n    
n 是一个正整数。一个反向引用(back reference),指向正则表达式中第 n 个括号(从左开始数)中匹配的子字符串。

例如,/apple(,)\sorange\1/ 匹配 "apple, orange, cherry, peach." 中的 "apple,orange,"。

判断字符串是不是包含a-z(忽略大小写)这26个字母

匹配任意字母,并且去重;例如 aaabbbbcccddd 会是 [a,b,c,d]

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题