在
JavaScript
中,正则表达式也是对象。用于匹配字符串中字符组合的模式。
如何创建
- 字面量(常用):
Var regExp = /(^\s+)|(\s+$)/g
RegExp
对象:Var regExp = new RegExp("(^\s+)|(\s+$)", "g")
其中 g
表示全文匹配多次,与之相关的还有 i
和 m
,i
表示匹配时忽略大小写,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表示全局匹配,匹配完所有。