分组
分组是通过一系列括号包括一系列字符,字符类以及量词来使用的。例如想匹配字符串"dogdog" 可以使用分组 /(dog){2}/ 来表示。
使用反向引用
每个引用都被存放在一个特殊的地方以备将来使用,这些存储在分组中的特殊值,被成为反向引用。
反向引用是按照从左到右遇到的左括号的顺序来进行创建和编号的,
例如表达式(A?(B?(C?)))将产生1-3的 三个反向引用。
1.(A?(B?(C?)));
2.(B?(C?));
3.(C?)
反向引用可以有几种不同的使用方法。 首先使用正则表达式对象的test(),match()或search()方法后,反向引用的值可以从RegExp构造函数中获得。
还可以直接在定义分组表达式中包含反向引用,这可以通过使用特殊转义序列\1,\2等等来实现
var sToMatch = "dogdog";
var reDogDog = /(dog)\1/;
alert(reDogDog.test(sToMatch)); //output true
反向引用可以使用在String类的replace()方法中,这通过使用特殊字符序列$1,$2等等来实现。 描述这种功能的最佳例子是在调换字符串中的两个单词的顺序。 将1234 5678 变成 5678 1234可以如此实现
var sToMatch = "1234 5678";
var reMatch = /(\d{4}) (\d{4})/;
var sNew =sToMatch.replace(reMatch,"$2 $1");
alert(sNew); //5678 1234
候选
候选操作符和ECMAScript的二进制异或一样,是一个管道符(|),它放在两个单据的模式之间。
var sToMatch1 = "blue";
var sToMatch2 = "red";
var sToMatch3 = "black";
var re = /blue|red|black/;
alert(re.test(sToMatch1)); //output "true"
alert(re.test(sToMatch2)); //output "true"
alert(re.test(sToMatch3)); //output "true"
OR模式在实践中一种通常的用法是从用户输入中删除不合适的词。通过针对这些敏感单词使用OR 模式和replace方法,则可以很方便的在帖子发布之前去掉敏感内容。
非捕获性分组
创建反向引用的分组,我们称之为捕获性分组。同时还有一个非捕获性分组,它不会创建反向引用。 如果要创建一个非捕获性分组,则要在左括号后面加上一个问号和一个冒号 ?:
例如去除所有的HTML标记
分组是通过一系列括号包括一系列字符,字符类以及量词来使用的。例如想匹配字符串"dogdog" 可以使用分组 /(dog){2}/ 来表示。
var re=/([bd]ad?)*/;//可以匹配 ba,da bda,bad,dad,bdad
使用反向引用
每个引用都被存放在一个特殊的地方以备将来使用,这些存储在分组中的特殊值,被成为反向引用。
反向引用是按照从左到右遇到的左括号的顺序来进行创建和编号的,
例如表达式(A?(B?(C?)))将产生1-3的 三个反向引用。
1.(A?(B?(C?)));
2.(B?(C?));
3.(C?)
反向引用可以有几种不同的使用方法。 首先使用正则表达式对象的test(),match()或search()方法后,反向引用的值可以从RegExp构造函数中获得。
var re=/#(\d+)/;
var str="#123456";
re.test(str);
alert(RegExp.$1); //output 123456
var str="#123456";
re.test(str);
alert(RegExp.$1); //output 123456
还可以直接在定义分组表达式中包含反向引用,这可以通过使用特殊转义序列\1,\2等等来实现
var sToMatch = "dogdog";
var reDogDog = /(dog)\1/;
alert(reDogDog.test(sToMatch)); //output true 反向引用可以使用在String类的replace()方法中,这通过使用特殊字符序列$1,$2等等来实现。 描述这种功能的最佳例子是在调换字符串中的两个单词的顺序。 将1234 5678 变成 5678 1234可以如此实现
var sToMatch = "1234 5678";
var reMatch = /(\d{4}) (\d{4})/;
var sNew =sToMatch.replace(reMatch,"$2 $1");
alert(sNew); //5678 1234候选
候选操作符和ECMAScript的二进制异或一样,是一个管道符(|),它放在两个单据的模式之间。
var sToMatch1 = "blue";
var sToMatch2 = "red";
var sToMatch3 = "black";
var re = /blue|red|black/;
alert(re.test(sToMatch1)); //output "true"
alert(re.test(sToMatch2)); //output "true"
alert(re.test(sToMatch3)); //output "true"OR模式在实践中一种通常的用法是从用户输入中删除不合适的词。通过针对这些敏感单词使用OR 模式和replace方法,则可以很方便的在帖子发布之前去掉敏感内容。
var reBadWord = /badword|anotherbadword/gi;
var sUserInput = "this is a string using badword and badword1 and anotherbadword";
var finalText = sUserInput.replace(reBadWord,"****");
alert(finalText); //this is a string using **** and ****1 and ****
var finalText1 = sUserInput.replace(reBadWord,function (sMatch)
{
return sMatch.replace(/./g,"*");
}
);
//可以将每个字符都替换成*
alert(finalText1);//this is a string using ******* and *******1 and **************
var sUserInput = "this is a string using badword and badword1 and anotherbadword";
var finalText = sUserInput.replace(reBadWord,"****");
alert(finalText); //this is a string using **** and ****1 and ****
var finalText1 = sUserInput.replace(reBadWord,function (sMatch)
{
return sMatch.replace(/./g,"*");
}
);
//可以将每个字符都替换成*
alert(finalText1);//this is a string using ******* and *******1 and **************
非捕获性分组
创建反向引用的分组,我们称之为捕获性分组。同时还有一个非捕获性分组,它不会创建反向引用。 如果要创建一个非捕获性分组,则要在左括号后面加上一个问号和一个冒号 ?:
var sToMatch = "#123456789";
var reNumber = /#(?:\d+)/;
reNumber.test(sToMatch);
alert(RegExp.$1); //output ""
var reNumber = /#(?:\d+)/;
reNumber.test(sToMatch);
alert(RegExp.$1); //output ""
例如去除所有的HTML标记
//匹配html标记 <b>abcd</b> 提出去abcd
var sHTML = "<a href=\"abcd\">a b c d</a>";
var regHTML = /<(.|\s)*?>/ig;
var sResult = sHTML.replace(regHTML,"");
alert(sResult); //output "a b c d"
var sHTML = "<a href=\"abcd\">a b c d</a>";
var regHTML = /<(.|\s)*?>/ig;
var sResult = sHTML.replace(regHTML,"");
alert(sResult); //output "a b c d"
浙公网安备 33010602011771号