一,全文属性
- g 表示全文匹配
- i 表示匹配时忽略大小写
- m 表示多行匹配
二、()、[]、{} 的区别
- ( ) 的作用是提取匹配的字符串。表达式中有几个()就会得到几个相应的匹配字符串。比如 (\s+) 表示连续空格的字符串。
- [ ] 是定义匹配的字符范围。比如 [a-zA-Z0-9] 表示字符文本要匹配英文字符和数字。
- { } 一般用来表示匹配的长度,比如 \d{3} 表示匹配三个空格,\d[1,3]表示匹配1~3个空格。
三、^ 和 $
- ^ 匹配一个字符串的开头,比如 (^a) 就是匹配以字母a开头的字符串
- $ 匹配一个字符串的结尾,比如 (b$) 就是匹配以字母b结尾的字符串
- ^ 还有另个一个作用就是取反,比如[^xyz] 表示匹配的字符串不包含xyz
(如果^出现在[ ]中一般表示取反,而出现在其他地方则是匹配字符串的开头)
四、\d \s \w .
- \d 匹配一个非负整数, 等价于 [0-9]
- \s 匹配一个空白字符
- \w 匹配一个英文字母或数字,等价于[0-9a-zA-Z]
- 匹配除换行符以外的任意字符,等价于[^\n]
*五、 + ?
- 表示匹配前面元素0次或多次,比如 (\s*) 就是匹配0个或多个空格
- 表示匹配前面元素1次或多次,比如 (\d+) 就是匹配由至少1个整数组成的字符串
- ? 表示匹配前面元素0次或1次,相当于{0,1} ,比如(\w?) 就是匹配最多由1个字母或数字组成的字符串
六、test 、match
前面的大都是JS正则表达式的语法,而test则是用来检测字符串是否匹配某一个正则表达式,如果匹配就会返回true,反之则返回false
/\d+/.test("123") ; //true
/\d+/.test("abc") ; //false
match是获取正则匹配到的结果,以数组的形式返回
“186a619b28”.match(/\d+/g); // [“186”,“619”,“28”]
replace
var newStr = str.replace(regexp|substr, newSubStr|function)
第1个参数可以是一个普通的字符串或是一个正则表达式
第2个参数可以是一个普通的字符串或是一个回调函数
如果第1个参数是RegExp, JS会先提取RegExp匹配出的结果,然后用第2个参数逐一替换匹配出的结果
如果第2个参数是回调函数,每匹配到一个结果就回调一次,每次回调都会传递以下参数:
result: 本次匹配到的结果
$1,...$9: 正则表达式中有几个(),就会传递几个参数,$1~$9分别代表本次匹配中每个()提取的结果,最多9个
offset:记录本次匹配的开始位置
source:接受匹配的原始字符串
例子:1简单的字符串替换
let str = 'hello world';
let str1 = str.replace('hello', 'new');
console.log(str1) //new world
console.log(str) //hello world
2.正则替换,正则全局匹配需要加上g,否则只会匹配第一个
let str = 'hello world';
let str2 = str.replace(/o/,'wyx');
let str3 = str.replace(/o/g,'wyx');
console.log(str2) //hellwyx world
console.log(str3) //hellwyx wyxlrld
3$’:表示匹配字符串右边的文本
let str = 'hello world';
let str4 = str.replace(/hello/g, "$'");
let str5 = str.replace(/o/g, "$'");
console.log(str4) // world world
console.log(str5) //hell world wrldrld
4 $`(tab键上方的字符):表示匹配字符串文本左边的文本
let str = 'hello world';
let str6 = str.replace(/world/,"$`");
console.log(str6) //hello hello
5$$ : 表示插入一个$
let str = '¥2000.00';
let str7 = str.replace(/¥/,"$$");
console.log(str7) //$2000.00
6当第二个参数是函数时,将所有单词首字母改为大写
let str = 'please make heath your first proprity';
str1 = str.replace(/\b\w+\b/g, function (word) {
console.log('匹配正则的参数',word);
return word[0].toUpperCase() + word.slice(1);
});
console.log(str1); //Please Make Heath Your First Proprity
7我们将把 “Doe, John” 转换为 “John Doe” 的形式:
name = "Doe, John";
name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1");