您的位置:首页 > Web前端 > JavaScript

javascript 正则表达式入门到高级-02

2017-03-17 10:17 567 查看
量词,很常见,所以在正则里面也有量词-->一个东西出现的次数。

常见形式:

(n,m) 最少出现n次,最多m次;

 (n, )      最少出现n次,最多不限;

 (,m )   最少不限,最多m次;

 +-->     量词:任意长度;==(1, );

 ?           (0,1);

   *          (0, )前一项零次或者多次
  |            或;

行首和行尾   ^ $  常用校验--去掉首位的空。
(?=)    会作为匹配校验,但不会出现在匹配结果字符串里面(?:)     会作为匹配校验,并出现在匹配结果字符里面,它跟(...)不同的地方在于,不作为子匹配返回。
var
 
data = 
'windows 98 is ok'
;
data.match(/windows (?=\d+)/);  
// ["windows "]
data.match(/windows (?:\d+)/);  
// ["windows 98"]
data.match(/windows (\d+)/);    
// ["windows 98", "98"]


x{m,n}  匹配最少m个最多n个x

x? 匹配的是0个或者 1个x;


正则中问号的用法: 在表示重复的字符后面加问号,比如+?,*?,{2,3}?可以停止匹配的贪婪模式
1234567891011
var
pattern=/\w{2,3}/;
console.log(
"aaaa"
.match(pattern)[0]);
/*结果"aaa";贪婪模式下会尽可能多的匹配,
所以会匹配3个重复的字符
*/
var
pattern2=/\w{2,3}?/;
console.log(
"aaaa"
.match(pattern2)[0]);
/*
*结果"aa";加问号后会尽可能少的匹配重复次数,
*所以匹配到了2个重复的字符
*/
在分组内使用?:可以产生没有编号的分组,比如?
123456789101112
var
pattern=/(ab)\w+(ba)/;
console.log(
"abcba_"
.replace(pattern,
"$1"
));
/*结果"ab_";匹配到的字符被第一个分组(ab)
*替换
*/
var
pattern2=/(?:ab)\w+(ba)/;
console.log(
"abcba_"
.replace(pattern2,
"$1"
));
/*
*结果"ba_";第一次分组内加入了?:,产生的是一个
*没有编号的分组,所以$1匹配的字符是第二个分组,
*也就是第一个编号分组(ba)相匹配的文本内容
*/
(?=)和(?!);零宽正向断言和负向断言,括号内表示某个位置右边必须和=右边匹配上,或者不和!后的字符匹配。?
1234567891011
var
pattern=/str(?=ings)ing/;
console.log(
"strings.a"
.match(pattern));
console.log(
"strings.a"
.match(/string(?=s)/));
console.log(
"string_x"
.match(pattern));
console.log(
"string_x"
.match(/string(?=s)/));
/*前两个结果是["string"],后两个结果是null;
*str(?=ings)ing/匹配"string",r后面的位置右边必须跟
*上ings;和/string(?=s)/一样;匹配"string";g后面的位置
*的右边必须跟一个s。"string_x"虽然也含有"string"但是
*不满足(?=...)括号内的条件
*/
?
123456
var
pattern=/string(?!s)/;
console.log(
"strings"
.match(pattern));
//null
console.log(
"string."
.match(pattern));
//["string"]
/*(?!...)某位置右边不能有!后匹配的字符,
*string(?!s)/匹配"string","g"后不能跟"s"
*/
在表示重复次数时,代表重复0次或1次
eg:var arr = '我的QQ号是:1310596493,你的QQ是523348562吗?';
var re = /[1-9]\d{4,10}/g; //后面跟4-10个普通的数字。
alert(arr.match(re));结果:1310596493,523348562

备注:判断是否有中文存在    [\u4e00-\u9fa5]-- 汉字的第一个字和最后一个汉字;中间的是utf-8格式的汉字。

示例:1)“偷”小说,因为复制的话有html代码,所以利用正则消除代码。

代码:

 window.onload = function()
{
 var oTx1 = document.getElementById('txt1');
 var oTx2 = document.getElementById('txt2');
 var oBtn = document.getElementById('btn');
 
 oBtn.onclick = function()
 {
   var re = /(<[^<>]+>)|( )/g;
   oTx2.value = oTx1.value.replace(re,'');
 };

};
</script>
</head>
<body>
<textarea id="txt1" cols="40" rows = "5"></textarea>
<input type="button" value="过滤" id="btn">
<textarea id="txt2" cols="40" rows = "5"></textarea>
</body>
 2) 邮箱验证: var re = /^\w+@[a-z0-9]+\.[a-z]{2,4}$/;
  3)去掉行首行尾的空格:var re = /^\s|\s$/g;

  4)getByClass()选元素的完美封装
function getByClass(oparent,oclass)
{
  var oEl = oparent.getElementsByTagName('*');
  var aResult = [];
  var re = new RegExp('\\b'+oclass+'\\b','i');
//两边必须是单词的边界,不会是单词的一部分,比如abox等,需要转义一次。

//单词都是有边界的,字符串也一样,空格,逗号,都是是边界。

for(var i=0; i<oEl.length; i++)               
{
   if(re.test(oEl[i].className) )
     {
      aResult.push(oEl[i]);
    }
   }
  return aResult;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: