javascript正则表达式:
1、正则表达式定义:
正则表达式(Regular Express)是一个描述字符模式的对象,ECMAcript的RegExp类表示正则表达式,而String和RegExp都定义了使用正则表达式强大的模式匹配与文本检索与替换的函数。
2、创建正则表达式:
第一种创建方式:
RegExp reg = new RegExp('box');//第一个是参数字符串
RegExp reg = new RegExp('box','ig');//第二个是可选模式修饰符
第二种创建方式:
var box = /box/;//直接使用反斜杠
var box = /box/ig;//在第二个反斜杠后面添加可选模式修饰符
3、测试正则表达式:
RegExp提供了两个方法来测试字符串匹配
1)test():在指定的字符串中查找是否存在指定正则表达式并返回布尔值,如果存在返回true,否则返回false;
2)exec():在指定的字符串中查找是否存在指定正则表达式,如果exec()方法执行成功,则返回包含该查找字符串的相关信息,如果失败,则返回null.
4、获取控制
正则表达式元字符是包含特殊含义的字符。它们有一些特殊功能,可以控制匹配模式的方式,反斜杠后的元字符将失去其特殊含义。
贪婪与懒惰
贪婪模式与懒惰模式的语法区别在于重复限定修饰符的后面是否有问号,有的话就是懒惰模式,否则就是贪婪模式。
贪婪量词,是先吃尽所有字符,然后再一个一个地吐出来,直到匹配成功为止。
懒惰量词,是从头开始一个字符一个字符地吃,直到匹配成功为止。即贪婪是逐渐向前匹配,而懒惰是向后慢慢匹配。
例子:
var pattern=/[a-z]+?/ //?关闭了贪婪匹配,只替换了第一个
var str=’ajfifdjnfasdfdasdgh’;
var result=str.replace(pattern,’xxx’);
alert(result); //返回xxxjfifdjnfasdfdasdgh
var pattern=/8(.+?)8/g; //禁止了贪婪,开启的全局
var str=’this is 8abc8, that is 8abc8, there is 8abc8’;
var result=str.replace(pattern,’$1‘);
document.write(result); //返回this is abc, that is abc, there is abc
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script>
/**
* 正则表达式
* ?:匹配表达式0次或者1次
* \w:字母或下划线或数字中的一个
* +:表达式至少出现一次
* g:代表可以进行全局匹配
* @param {Object} sUrl:要获取参数的url
* @param {Object} sKey:要取得参数值的参数名称
* 功能:从一个url找出对应参数的参数值
*/
function getUrlParam(sUrl, sKey) {
var arr={};
sUrl.replace(/\??(\w+)=(\w+)&?/g,function(match,p1,p2){
console.log(match,p1,p2);
if(!arr[p1]){
arr[p1]=p2;
}
else {
var p=arr[p1];
arr[p1]=[].concat(p,p2);
}
})
if(!sKey)return arr;
else{
for(var ele in arr){
if(ele==sKey){return arr[ele];}
}
return "";
}
}
/*
* *:表达式不出现或者出现任意多次
* \d:一个数字
* {n}:表达式重复n次
* {n,m}:表达式最少出现n次,最多出现m次
* 给定字符串,检查是否符合美元书写标准
* 1)以$开始
* 2)整数部分,从个位开始每隔3为用‘,’分割
* 3) 如果为小数,保留两位小数
* 4)正确格式:$13,456,234.34
*/
function idUSD(str){
return /^\$\d{1,3}(,\d{3})*(\.\d{2})?$/.test(str);
}
/*
* 给定字符格式,判断给定的是否符合特定格式
* 1)给定格式:XXXX-XXXX-XXX
* 2)其中X为NUmber类型
*/
function matchPattern(str){
return /^(\d{4}-){2}\d{3}$/.test(str);
}
/*
* 判断给定的字符串里面是否包含三个连续的数字,如果是返回这个数字,如果不是则返回false;
*/
function CaptureThreeNum(str){
var result;
if(result = str.match(/\d{3}/)){
return result[0];
}else{
return false;
}
}
/*
* i:表示不区分大小写匹配
* [a,b,c]:表示匹配里面的任意一个
* 字符是否以元音结尾
*/
function endWithVowels(str){
return /[a,e,i,o,u]$/i.test(str);
}
/*()的作用:
* 1)在被修饰匹配次数的时候,括号里面的表达式可以作为整体被修饰
* 2)取匹配结果的时候,括号里面匹配到的表达式可以被单独得到
* 表达式在匹配的时候,表达式引擎会将小括号“()”包含的表达式所匹配的字符串记录下来,在获取匹配结果的时候,小括号表达式所匹配到的字符串可以单独取出;
* “小括号包含的表达式所匹配的字符串”不仅在匹配结束后才可以使用,在匹配过程中也可以使用。
* 引用方法:在‘\’后面添加一个数字,如"\1"表示引用第一对小括号匹配到的字符串,以此类推;
* 如果一对括号里面包含另一对括号,则外层的括号先排序号,换句话那对括号的左括号在前,那一对括号就先排序号。
* 判断连续重复字母
*/
function containRepeatLetter(str){
return /([a-zA-Z]\1)/.test(str);
}
/*\d:一个数字
*\D:一个非数字
*\s:换行符、制表符、换页符等空白符号中的一个
*\S:除换行符、制表符、换页符等空白符号中的一个
*\w:下划线、字符串、数字里面的一个
*\W:除下划线、字符串、数字里面的一个
* 给定的字符串里面是否含有数字
*/
function containsNumber(str){
return /\d/.test(str);
}
console.log(getUrlParam("http://localhost:8088/qsp_xj/template/rqdht.html?op=m&report=YX_XSQSFX","report"));
console.log(idUSD('$13,4536,234.34'));
console.log(matchPattern('1232-3425-235'));
console.log(CaptureThreeNum('1232-3425-235'));
console.log(endWithVowels('1232-3425-235e'));
console.log(containRepeatLetter('1232-3425-23523A'));
console.log(containsNumber('A'));
</script>
</body>
</html>