JS 正则表达式#1

2020-07-01  本文已影响0人  IamaStupid

和正则表达式搭配使用的方法,用的比较多的有三个:RegExp 对象的 test(),RegExp 对象的exec() ,字符串方法 match()。

reg.test(str) // 返回true/false,表示在字符串中是否匹配对应的正则模式
reg.exec(str) // 在字符串中如果匹配到对应的正则模式,则返回匹配的结果,如果未找到匹配,则返回值为 null
str.match(reg) // 在字符串中如果匹配到对应的正则模式,则返回匹配的结果,如果未找到匹配,则返回值为 null

找出字符串中的所有数字
var str = "123abc4d5y6j70wslds";
var reg, arr, arr2;

  // reg = new RegExp(/[0-9]/g);
  // arr = reg.exec(str)
  // arr2 = str.match(reg)
  // console.log('exec:', arr)
  // console.log('match:', arr2)
  // exec: ["1", index: 0, input: "123abc4d5y6j70wslds", groups: undefined] 
  // match:(8) ["1", "2", "3", "4", "5", "6", "7", "0"]

  reg = new RegExp(/[0-9]+/g);
  arr = reg.exec(str)
  arr2 = str.match(reg)
  console.log('exec:', arr)
  console.log('match:', arr2)
  // exec: ["123", index: 0, input: "123abc4d5y6j70wslds", groups: undefined]
  // match: (5) ["123", "4", "5", "6", "70"]

正则表达式语法参考:http://c.biancheng.net/view/5632.html
[0-9]:查找从 0 至 9 范围内的数字,即查找数字。
n+: 重复匹配, 匹配任何包含至少一个 n 的字符串。

匹配字母abc以及f到k之间的字母,即跳过d-e,L-z
  reg = new RegExp(/[abcf-k]+/g);
  arr = reg.exec(str)
  arr2 = str.match(reg)
  console.log('exec:', arr)
  console.log('match:', arr2)
  // exec: ["abc", index: 3, input: "123abc4d5y6j70wslds", groups: undefined]
  // match: (2) ["abc", "j"]
找出字符串中符合手机号格式的字符串(以13,14,15,18开头的11位数字)
str = "张三zhangsan,性别男,电话1391511231218877777771558nnxy999999999,固定电话021-8800"
  // reg = new RegExp(/1[3458][0-9]{9}/g);
  reg = new RegExp(/(13|15|18|14)[0-9]{9}/g);
  arr = reg.exec(str)
  arr2 = str.match(reg)
  console.log('exec:', arr)
  console.log('match:', arr2)
  // exec: (2) ["13915112312", "13", index: 17, input: "张三zhangsan,性别男,电话1391511231218877777771558nnxy999999999,固定电话021-8800", groups: undefined]
  // match: (2) ["13915112312", "18877777777"]

其实字符串中还有一个字符串15112312188,但是没有匹配到,因为匹配的时候,有一个索引,当匹配到13915112312的时候,索引已经移到15后面了,自然匹配不到了。
另外,有时候看到条件,以13,15...开头,就习惯性给正则加上了符号,这是不对的,符号是表示匹配的字符串是不是以13,15...开头,一般在test()正则判断的时候用的多,比如验证一个手机号是否输入正确。

把三个手机号全部找到的方法
let reg = /(1[3458](?=[0-9]{9}))/g
let str = "张三zhangsan,性别男,电话13915112312188777777777,固定电话021-8800"
while (match = reg.exec(str)) {
console.log(str.substr(match.index,11));
}

?= 表示只做匹配,但是不消耗字符,所以如果用match,会发现结果只抓取了['13','15','18']

上一篇下一篇

猜你喜欢

热点阅读