首先,一些基本的:
\d 匹配一个数字,等价于[0-9]
\D 匹配一个非数字,等价于[^0-9]
\w 匹配一个单字字符(字母、数字、下划线),等价于[a-zA-Z0-9_]
\W 匹配一个非单字字符,等价于[^a-zA-Z0-9_]
.(小数点) 匹配除换行符之外的任意一个字符
? 匹配前一个表达式0次或1次,等价于{0,1}
+ 匹配前一个表达式1次或多次,等价于{1,}
* 匹配前一个表达式0次或多次,等价于{0,}
(x) 匹配‘x’并记住匹配项,()称为捕获括号
几个不常见的:
(?:x) 匹配‘x’但不记住匹配项,?:称为非捕获符号
x(?=y) 匹配‘x’仅仅当‘x’后面跟着‘y’,正向肯定查找,但不记住()里面的匹配项
x(?!y) 匹配‘x’仅仅当‘x’后面不跟着‘y’,正向否定查找,但不记住()里面的匹配项
demo:
//把str_demo转化成一个[aaa123,bbb456,ccc789,ddd129]的数组
var str_demo = '123aaa ,456bbb , 789ccc , 129ddd';
//定义一个匹配前后空格,中间是‘,’的正则;
var pattern = /\s*,\s*/;
//利用正则的split方法将字符串按匹配的正则分割成字符串数组
var strArr = str_demo.split(pattern);
//定义一个匹配前面是数字,后面是字母的正则;
pattern = /(\d+)([a-z]+)/
var j,len;
var newArr = [];
for(j = 0,len = strArr.length; j<len; j++){
//$1、$2分别是匹配到的第一个小括号、第二个小括号的内容
newArr.push(strArr[j].replace(pattern,'$2$1'))
}
console.log(newArr);
//[aaa123,bbb456,ccc789,ddd129]
?:的用法
//?:的用法
var str_demo = '123aaa ,456bbb , 789ccc , 129ddd';
//定义一个匹配前后空格,中间是‘,’的正则;
var pattern = /\s*,\s*/;
//利用正则的split方法将字符串按匹配的正则分割成字符串数组
var strArr = str_demo.split(pattern);
//定义一个匹配前面是数字,后面是字母的正则;
//给一个括号加上?:,使其不捕获第一个括号里面匹配到的内容
pattern = /(?:\d+)([a-z]+)/
var j,len;
var newArr = [];
for(j = 0,len = strArr.length; j<len; j++){
//$1、$2分别是匹配到的第一个小括号、第二个小括号的内容
newArr.push(strArr[j].replace(pattern,'$1'))
}
console.log(newArr); //[aaa,bbb,ccc,ddd]
\1的用法
\1 匹配的是 所获取的第1个()匹配的引用
\2 匹配的是 所获取的第2个()匹配的引用
//\1的用法
//匹配两个重复的数字的正则
var reg1 = /(\d)\1/;
// console.log(demo_n.search(reg_n))
console.log(reg1.test('88')); //true
console.log(reg1.test('89')); //false
console.log('88'.search(reg1)); //0
console.log('89'.search(reg1)); //-1
console.log(reg1.exec('88')); // ["88", "8", index: 0, input: "88", groups: undefined]
console.log(reg1.exec('89')); //null
console.log('88'.match(reg1)); //["88", "8", index: 0, input: "88", groups: undefined]
console.log('89'.match(reg1)); //null
//匹配一个数字后面两个重复的字母的正则
var reg2 = /(\d)([a-z])\2/;
console.log(reg2.test('8cc')); //true
console.log(reg2.test('8ab')); //false
网友评论