正则表达式
正则表达式的一些方法:
test方法:查找字符串中是否匹配正则表达式,如果匹配返回结果是:true,否则返回false;形式:reg.test(str)
exec方法:查找匹配的正则表达式
如果匹配的话返回结果是一个数组,数组0元素是整个的匹配,1-n元素是各个子匹配,数组有三个属性:
input:返回整个字符串,
index:返回匹配的子字符串在整个字符串的位置
lastIndex:返回匹配的子字符串最一个字符的下一个字符
如果不匹配的话返回的是值是null
有全局识志(g)与没有全局标识符的话,区别很大,第一次调用的话返回The,第二次调用返回rain,第三次调用返回in...,如果没有的话不管调用多少
次返回的都是the,
var src = "The rain in Spain falls mainly in the plain.";
var re = /\w+/g;
var arr;
alert(src.match(re))//有g的话,返回[The,rain,in,Spain,falls,mainly,in,the,plain.]如果没有g的话则返加[The]
var u="http://msdn.microsoft.com:80/scripting/default.htm";
var s=/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/;
var a=s.exec(u);
for(i=1;i<a.length;i++){
alert(a[i]);
}//这个数组的每个元素是各个分组中的内容,有g没g都一样
match方法:结果是返回一个数组,如果有全局标识符的话,有g的话,返回[The,rain,in,Spain,falls,mainly,in,the,plain.]如果没有g的话则返加[The],形
式:str.match(reg)
search方法:返回匹配的的字符串的首字符在整个表达式中的偏移位置,如果不匹配的话则返回-1,形式:str.search(reg),有没有全局标识符都一样
split()方法:结果是一个字符串数组,在 stingObj 中每个出现 separator 的位置都要进行分解。separator 不作为任何数组元素的部分返回。有个例外的地方:
<textarea id="txtArea"></textarea>
<script language="javascript">
$("#txtArea").click(function(){
alert(document.getElementById("txtArea").value.split(/(\n|\r)/g).length)
})
</script>
正则表达式中有分组时则将匹配的结果也作为数组的一部分返回,匹配的空格也作为数组一部分返回,正确形式:/\n|\r/g,
以下是常用的一些匹配规则:
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]
匹配空行的正则表达式:\n[\s| ]*\r
匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/
匹配首尾空格的正则表达式:(^\s*)|(\s*$)(像vbscript那样的trim函数)
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配网址URL的正则表达式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
以下是例子:
利用正则表达式限制网页表单里的文本框输入内容:
用正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,")"
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,"))"
1.用正则表达式限制只能输入全角字符: onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,")"
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,"))"
2.用正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^\d]/g,")
“onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,"))"
3.用正则表达式限制只能输入数字和英文:onkeyup="value=value.replace(/[\W]/g,")
“onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,"))"
4.字符串的replace:
str.replace(/(<(\w+)[^>]*?\/>)/g,function(all, front, tag){})这个是匹配标签符例<div/>,all表示总个匹配,front表示第一个分组,tag表示第二个分组
5.cookie中取值
reg = /(?:^|;)cookieName([^;]*)/
6.url中取值
reg = /[?&]keyName=([^&]*)/
7.className的变换
document.getElementById('aa').className += 'className'
document.getElementById('aa').className =
document.getElementById("MyElement").className.replace(/(?:^|\s)MyClass(?!\S)/,'');