jieye の 数字花园

Search

Search IconIcon to open search

RegExp

Last updated Nov 1, 2021

# 匹配字符规则

预定义类量词符边界符
\d 匹配数字,相当于[0-9]***** 0个或者更多^ 一行的开头
\D 匹配数字,相当于[^0-9]+ 1个或更多,至少1个$ 一行的结尾
\w 匹配数字、字母、下划线,相当于[A-Za-z0-9_]? 0个或1个,一个Optional\b 单词"结界"(word bounds)
\W 匹配数字、字母、下划线,相当于[^A-Za-z0-9_]{min,max} 出现次数在一个范围内
\s 匹配空格字符,如换行、制表,相当于[\t\r\n\v\f]{n,} 重复n次或更多
\S 匹配空格字符,相当于[^\t\r\n\v\f]{n} 重复n次
. 匹配任何,任何的字符

# 一些例子

# 现在想找5个字母组成的单词:\b\w{5}\b

# 请匹配所有可能的电话号码:

1
2
3
These are some phone numbers 915-134-3122. Also,
you can call me at 643.123.1333 and of course,
I'm always reachable at (212)867-5509

第一步: \d{3}[-.]\d{3}[-.]\d{4}

第二步: 为了能够匹配括号,可以使用?来,因为这是一个option选择。所以最后就成了

1
/\(?\d{3}[-.)]\d{3}[-.]\d{4}/

这里还是要说明,在[]中,特殊字符不需要转义,可以直接使用,比如[.()],但是在外面,是需要转义的\( \.

# 匹配所有email

1
2
3
gaoyaqi411@126.com  
dyumc@google.net 
sam@sjtu.edu

思路

首先要想我到底相匹配什么,这里我想匹配的是

  1. 任何一个以words开头的,一个或更多 \w+
  2. 紧接着是一个@符号 \w+@
  3. 接着有一个或者更多的words \w+@\w+
  4. 接着一个.标点 \w+@\w+\.
  5. 接着一个com netedu \w+@\w+\.(com|net|edu)

还是提醒注意第四步的\.转义符号

好了,这样几可以匹配以上的所有邮箱了。但是还有一个问题,因为邮箱用户名是可以有.的,比如vincent.ko@126.com

其实仍然很简单,修复如下: [\w.]+@\w+\.(com|net|edu)

# 总结

  1. /[-.(]/ 在符号中的连字符-放在第一位表示连字符本身,如果放在中间,表示"从..到..",比如[a-z]表示a-z。
  2. [.)] 括号中的特殊符号不需要转义,就表示其本身
  3. (a|b)也可表示选择,但是它有更强大的功能….