JS之正则表达式

JavaScript 中,正则表达式也是对象。用于匹配字符串中字符组合的模式。

如何创建


  • 字面量(常用): Var regExp = /(^\s+)|(\s+$)/g
  • RegExp 对象: Var regExp = new RegExp("(^\s+)|(\s+$)", "g")

其中 g 表示全文匹配多次,与之相关的还有 imi 表示匹配时忽略大小写,m 表示多行匹配,如果多个条件同时使用时,则写成:gmi

书写语法


  • () : 的作用是提取匹配的字符串。表达式中有几个()就会得到几个相应的匹配字符串。比如 (\s+) 表示连续空格的字符串。

  • [] : 是定义匹配的字符范围。比如 [a-zA-Z0-9] 表示字符文本要匹配英文字符和数字。

  • {} : 一般用来表示匹配的长度,比如 \d{3} 表示匹配三个空格,\d[1,3]表示匹配1~3个空格。

  • ^ : 匹配一个字符串的开头,比如 (^a) 就是匹配以字母a开头的字符串。^ 还有另个一个作用就是取反,比如[^xyz] 表示匹配的字符串不包含xyz

  • $ : 匹配一个字符串的结尾, 比如 (b$) 就是匹配以字母b结尾的字符串。

  • \d : 匹配一个非负整数, 等价于 [0-9]

  • \s : 匹配一个空白字符

  • \w : 匹配一个英文字母或数字,等价于[0-9a-zA-Z]

  • * : 表示匹配前面元素0次或多次,比如 (\s*) 就是匹配0个或多个空格

  • + : 表示匹配前面元素1次或多次,比如 (\d+) 就是匹配由至少1个整数组成的字符串

  • ? : 表示匹配前面元素0次或1次,相当于{0,1} ,比如(\w?) 就是匹配最多由1个字母或数字组成的字符串

常用方法


  • test: 用来检测字符串是否匹配某一个正则表达式,如果匹配就会返回true,反之则返回false
  • match: 获取正则匹配到的结果,以数组的形式返回
/\d+/.test("123") ; //true
/\d+/.test("abc") ; //false

"186a619b28".match(/\d+/g); // ["186","619","28"] 
  • replace: 字符串对象的一个方法,包含 2 个参数。

    • 第 1 个参数可以是一个普通的字符串或是一个正则表达式
    • 第 2 个参数可以是一个普通的字符串或是一个回调函数。

如果第1个参数是 RegExp, JS会先提取RegExp匹配出的结果,然后用第2个参数逐一替换匹配出的结果。

// 英文姓和名反转
var re = /(\w+)\s(\w+)/;
var str = "John Smith";
var newstr = str.replace(re, "$2, $1"); // Smith, John

// 千分位
var str = "1234567890";
str.replace(/\d{1,3}(?=(\d{3})+$)/g, function(match) {
    return match + ',';
});

千分位详简:正则表达式/\d{1,3}(?=(\d{3})+$)/g中的\d表示匹配数字,{1,3}表示匹配1到3次,\d{1,3}表示匹配连续的1到3个数字,\d{3}匹配连续的三个数字,(?=)表示反向匹配,即为从后向前匹配,(?=(\d{3})+$)就表示从后向前三位数字一匹配,至少匹配一次,而最前面必须有1到3个数字,即第一次的\d{1,3},最后的参数g表示全局匹配,匹配完所有。

参考资料


JS正则replace