javascript 正则表达式入门到高级-02
2017-03-17 10:17
567 查看
量词,很常见,所以在正则里面也有量词-->一个东西出现的次数。
常见形式:
(n,m) 最少出现n次,最多m次;
(n, ) 最少出现n次,最多不限;
(,m ) 最少不限,最多m次;
+--> 量词:任意长度;==(1, );
? (0,1);
* (0, )前一项零次或者多次
| 或;
行首和行尾 ^ $ 常用校验--去掉首位的空。
(?=) 会作为匹配校验,但不会出现在匹配结果字符串里面(?:) 会作为匹配校验,并出现在匹配结果字符里面,它跟(...)不同的地方在于,不作为子匹配返回。
正则中问号的用法: 在表示重复的字符后面加问号,比如+?,*?,{2,3}?可以停止匹配的贪婪模式
在分组内使用?:可以产生没有编号的分组,比如?
(?=)和(?!);零宽正向断言和负向断言,括号内表示某个位置右边必须和=右边匹配上,或者不和!后的字符匹配。?
?
在表示重复次数时,代表重复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>
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;
}
常见形式:
(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" */ |
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;
}
相关文章推荐
- javascript 正则表达式入门到高级-01
- javascript 正则表达式入门到高级-03
- javascript正则表达式入门
- JavaScript 正则表达式入门学习一
- JavaScript入门篇之正则表达式
- JavaScript中的正则表达式-正则入门
- Javascript高级培训-正则表达式
- JavaScript中的正则表达式快速入门
- JavaScript 正则表达式入门学习二
- javaScript高级教程(八)-----正则表达式温故知新
- javascript正则表达式基础知识入门
- Javascript高级培训-正则表达式 (作者:回眸 ID:eye_of_back)
- javascript高级-强大的正则表达式
- javascript高级程序设计-正则表达式应用
- javascript快速入门11--正则表达式
- 《JavaScript 高级程序设计》 7.1 正则表达式支持
- Javascript高级培训-正则表达式
- JavaScript语法入门系列(七) 类和对象(正则表达式RegExp)
- JavaScript 正则表达式的入门与使用
- javascript正则表达式入门