JS正则表达式大全【2】
JS常用正则表达式及验证时间的正则表达式
JS常⽤正则表达式及验证时间的正则表达式在这篇⽂章⾥,我已经编写了12个超有⽤的正则表达式,这可是WEB开发⼈员的最爱哦。
1.在input框中只能输⼊⾦额,其实就是只能输⼊最多有两位⼩数的数字 //第⼀种在input输⼊框限制<input type="text" maxlength="8" class="form-control" id="amount" style="margin-right: 2px;" value="" onChange="count();" onkeyup="if (this.value==this.value2) return; if (this.value.search(/^\d*(?:\.\d{0,2})?$/)==-1) this.value=(this.value2)?this.value2:'';else th //第⼆种对于表单动态增加的⽅式,只能在js⽅法中验证。
var amount=$("#amount").val();if (amount.search(/^\d*(?:\.\d{0,2})?$/)==-1) {alert("⾦额格式不对,最多有两位⼩数");return false;}2.验证邮箱格式var reg=/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;var email=$("#email").val();if(!reg.test(email) ){alert("请输⼊符合规范的邮箱账号!");return false;}3.密码采⽤数字、字母、特殊字符且长度为8-20位function validatePwd(str) {if (/^.*?[\d]+.*$/.test(str) && /^.*?[A-Za-z]/.test(str)&& /^.*?[~/`!@#$%^&*()_+|{}?;:><\-\]\\[\/].*$/.test(str) && /^.{8,20}$/.test(str)) {return true;}return false;}4.验证电话号码/*** 验证电话号码* @param phoneValue 要验证的电话号码* @returns 匹配返回true 不匹配返回false*/function validatePhone(phoneValue) {phoneValue = valueTrim(phoneValue);var reg = /^[1][0-9]{10}$/;return reg.test(phoneValue);}5.判断是否是汉字/*** 判断是否是汉字** @param charValue* 要验证的数据* @returns 匹配返回true 不匹配返回false*/function isCharacter(charValue) {var reg = /^[\u4e00-\u9fa5]{0,}$/;return reg.test(charValue);}6.是否为字母:true:是,false:不是function isChar(charValue){var charPattern=/^[a-zA-Z]*$/; //是否为字母result=charPattern.test(charValue);return result;}7.判断是否为数字function isNum(numValue){var numPattern=/^\d*$/; //数字的正则表达式result=numPattern.test(numValue);return result;}8.整数的正则表达式function isInt(intValue){var intPattern=/^0$|^[1-9]\d*$/; //整数的正则表达式result=intPattern.test(intValue);return result;}9.是否为字母和数字function isCharNum(flagValue){var flagPattern=/^[a-zA-Z0-9]*$/; //是否为字母和数字result=flagPattern.test(flagValue);return result;}10.检验18位⾝份证号码/*** 检验18位⾝份证号码(15位号码可以只检测⽣⽇是否正确即可,⾃⾏解决)** @param idCardValue* 18位⾝份证号* @returns 匹配返回true 不匹配返回false*/function idCardVildate(cid) {var arrExp = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ];// 加权因⼦var arrValid = [ 1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2 ];// 校验码var reg = /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/;if (reg.test(cid)) {var sum = 0, idx;for (var i = 0; i < cid.length - 1; i++) {// 对前17位数字与权值乘积求和sum += parseInt(cid.substr(i, 1), 10) * arrExp[i];}// 计算模(固定算法)idx = sum % 11;// 检验第18为是否与校验码相等return arrValid[idx] == cid.substr(17, 1).toUpperCase();} else {return false;}}11.验证15位数⾝份证号码中的⽣⽇是否是有效⽣⽇function isValidityBrithBy15IdCard(idCard15) {var year = idCard15.substring(6, 8);var month = idCard15.substring(8, 10);var day = idCard15.substring(10, 12);var temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));// 对于⽼⾝份证中的你年龄则不需考虑千年⾍问题⽽使⽤getYear()⽅法if (temp_date.getYear() != parseFloat(year)|| temp_date.getMonth() != parseFloat(month) - 1|| temp_date.getDate() != parseFloat(day)) {return false;} else {return true;}}12.验证18位数⾝份证号码中的⽣⽇是否是有效⽣⽇function isValidityBrithBy18IdCard(idCard18) {var year = idCard18.substring(6, 10);var month = idCard18.substring(10, 12);var day = idCard18.substring(12, 14);var temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));// 这⾥⽤getFullYear()获取年份,避免千年⾍问题if (temp_date.getFullYear() != parseFloat(year)|| temp_date.getMonth() != parseFloat(month) - 1|| temp_date.getDate() != parseFloat(day)) {return false;} else {return true;}}PS:js验证时间正则表达式验证时间格式为:2012-01-31 09:00:22var reDateTime = /^(?:19|20)[0-9][0-9]-(?:(?:0[1-9])|(?:1[0-2]))-(?:(?:[0-2][1-9])|(?:[1-3][0-1])) (?:(?:[0-2][0-3])|(?:[0-1][0-9])):[0-5][0-9]:[0-5][0-9]$/;var isDateTime = reDateTime.test('2012-01-31 09:00:22');以上所述是⼩编给⼤家介绍的JS常⽤正则表达式及验证时间的正则表达式,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。
js经典正则表达式
//var pattern=/^[a-zA-Z][a-zA-Z0-9_]{4,15}$/;//字母开头,限制5-16字节,允许字母数字下划线
//var pattern=/^\d{3}-\d{8}|\d{4}-\d{7,8}$/;//匹配国内电话 如:0739-8888888(8) 或 020-88888888
//var pattern=/^(\w)\1{4,}*$/;//匹配整数
//var pattern=/-?[1-9]\d*$/;//匹配整数
//var pattern=/^[1-9]\d*$/;//匹配正整数
//var pattern=/^-[1-9]\d*$/;//匹配负整数
//var pattern=/^[1-9]\d*|0$/;//匹配非负整数
//var pattern2=/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$/;//18位的身份证
var pattern=/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;//匹配E-MALI地址
'限制只能输入数字和英文:onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
js 正则的方法
js 正则的方法JavaScript 中的正则表达式(RegExp)是一种强大的工具,用于在字符串中执行复杂的搜索和替换操作。
以下是一些常用的JavaScript 正则表达式方法:1.test(): 这个方法检查一个字符串是否匹配某个模式。
它会返回一个布尔值,如果字符串中存在匹配的文本,则返回true,否则返回false。
javascriptlet regex = /hello/;console.log(regex.test('hello world')); // 输出: trueconsole.log(regex.test('goodbye world')); // 输出: false2.exec(): 这个方法在一个字符串中执行正则表达式搜索,并返回一个数组。
如果没有找到匹配的文本,则返回null。
javascriptlet regex = /hello/;let result = regex.exec('hello world');console.log(result); // 输出: ["hello", index: 0, input: "helloworld", groups: undefined]3.match(): 这个方法在一个字符串中执行正则表达式搜索,并返回一个数组。
如果没有找到匹配的文本,则返回null。
与exec()方法不同,match()方法只能用于全局搜索模式(g 标志)。
javascriptlet regex = /hello/g;let result = 'hello world hello everyone'.match(regex);console.log(result); // 输出: ["hello", "hello"]4.replace(): 这个方法在一个字符串中查找与正则表达式模式匹配的文本,并用替换文本替换它。
js数字的正则表达式
js数字的正则表达式正则表达式是一种用来描述、匹配文本模式的工具。
在 JavaScript 程序中,正则表达式能够轻松地处理文本、对文本进行快速的搜索、替换和分离等操作。
其中,表示数字的正则表达式是十分常见的,下面将介绍一些常用的 js 数字正则表达式。
1. 匹配整数:匹配一个整数,我们需要使用 ^ 和 $ 来匹配一个完整的数字。
大部分正则表达式都是以/ /(斜杠)包围起来的,形如:/^\d+$/其中,\d 表示匹配任意数字,+ 表示至少出现一次以上。
该正则表达式可以匹配任意多位数字的组合,但不能识别前导零和负号。
2. 匹配浮点数:如果需要使用正则表达式匹配一个浮点数时,我们可以使用以下正则表达式:/^[+-]?\d*\.?\d+$/其中,+表示匹配一个或多个,*表示匹配零个或多个。
该正则表达式可以匹配 "+45"、"-5.5"、"5.5"、"5." 和 ".5" 这样的数字。
3. 匹配零和非零开头的数字:如果我们需要匹配只以零开头的数字,可以使用以下正则表达式:/^0$|^0[0-9]+$/其中,| 表示逻辑或操作。
如果我们需要匹配非零开头的数字,可以使用这个正则表达式:/^[1-9]\d*$/其中,[1-9] 表示匹配任意非零数字,\d* 表示匹配任意多位数字。
4. 匹配数字范围:如果我们需要匹配数字的特定范围,例如 1 到 100 之间的数字,我们可以使用以下正则表达式:/^([1-9][0-9]?|100)$/该正则表达式只能匹配数字 1-100 之间的数字,不能识别前导零和非数字符号。
以上是一些常见的 js 数字正则表达式,希望能够对读者有所帮助。
在实际应用中,开发者应根据具体需求和实际情况进行调整和优化,以达到更好的匹配效果。
15个常用的javaScript正则表达式(收藏)
15个常⽤的javaScript正则表达式(收藏)1 ⽤户名正则//⽤户名正则,4到16位(字母,数字,下划线,减号)var uPattern = /^[a-zA-Z0-9_-]{4,16}$/;//输出 trueconsole.log(uPattern.test("iFat3"));2 密码强度正则//密码强度正则,最少6位,包括⾄少1个⼤写字母,1个⼩写字母,1个数字,1个特殊字符var pPattern = /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/;//输出 trueconsole.log("=="+pPattern.test("iFat3#"));3 整数正则//正整数正则var posPattern = /^\d+$/;//负整数正则var negPattern = /^-\d+$/;//整数正则var intPattern = /^-?\d+$/;//输出 trueconsole.log(posPattern.test("42"));//输出 trueconsole.log(negPattern.test("-42"));//输出 trueconsole.log(intPattern.test("-42"));4 数字正则可以是整数也可以是浮点数//正数正则var posPattern = /^\d*\.?\d+$/;//负数正则var negPattern = /^-\d*\.?\d+$/;//数字正则var numPattern = /^-?\d*\.?\d+$/;console.log(posPattern.test("42.2"));console.log(negPattern.test("-42.2"));console.log(numPattern.test("-42.2"));5 Email正则//Email正则var ePattern = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;//输出 trueconsole.log(ePattern.test(65974040@));6 ⼿机号码正则//⼿机号正则var mPattern = /^[1][3][0-9]{9}$/;//输出 trueconsole.log(mPattern.test("139********"));7 ⾝份证号正则//⾝份证号(18位)正则var cP = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;//输出 trueconsole.log(cP.test("110105************"));8 URL正则//URL正则var urlP= /^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/;//输出 trueconsole.log(urlP.test());9 IPv4地址正则//ipv4地址正则var ipP = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;//输出 trueconsole.log(ipP.test("115.28.47.26"));10 ⼗六进制颜⾊正则//RGB Hex颜⾊正则var cPattern = /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/;//输出 trueconsole.log(cPattern.test("#b8b8b8"));11 ⽇期正则//⽇期正则,简单判定,未做⽉份及⽇期的判定var dP1 = /^\d{4}(\-)\d{1,2}\1\d{1,2}$/;//输出 trueconsole.log(dP1.test("2017-05-11"));//输出 trueconsole.log(dP1.test("2017-15-11"));//⽇期正则,复杂判定var dP2 = /^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/; //输出 trueconsole.log(dP2.test("2017-02-11"));//输出 falseconsole.log(dP2.test("2017-15-11"));//输出 falseconsole.log(dP2.test("2017-02-29"));12 QQ号码正则//QQ号正则,5⾄11位var qqPattern = /^[1-9][0-9]{4,10}$/;//输出 trueconsole.log(qqPattern.test("65974040"));13 微信号正则//微信号正则,6⾄20位,以字母开头,字母,数字,减号,下划线var wxPattern = /^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/;//输出 trueconsole.log(wxPattern.test("RuilongMao"));14 车牌号正则//车牌号正则var cPattern = /^[京津沪渝冀豫云辽⿊湘皖鲁新苏浙赣鄂桂⽢晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/;//输出 trueconsole.log(cPattern.test("京K39006"));15 包含中⽂正则//包含中⽂正则var cnPattern = /[\u4E00-\u9FA5]/;//输出 trueconsole.log(cnPattern.test("42度"));推荐阅读:以上所述是⼩编给⼤家介绍的15个常⽤的javaScript正则表达式(收藏),希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。
经典 Javascript 正则表达式
正则表达式用于字符串处理,表单验证等场合,实用高效,但用到时总是不太把握,以致往往要上网查一番。
我将一些常用的表达式收藏在这里,作备忘之用。
匹配中文字符的正则表达式:[\u4e00-\u9fa5]匹配双字节字符(包括汉字在内):[^\x00-\xff]应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)String.prototype.len=function(){returnthis.replace([^\x00-\xff]/g,"aa").length; }匹配空行的正则表达式:\n[\s|]*\r匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/匹配首尾空格的正则表达式:(^\s*)|(\s*$)应用:j avascript中没有像v bscript那样的trim函数,我们就可以利用这个表达式来实现,如下:String.prototype.trim = function(){return this.replace(/(^\s*)|(\s*$)/g, "");}利用正则表达式分解和转换IP地址下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的Javascript程序:function IP2V(ip){re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g//匹配IP地址的正则表达式if(re.test(ip)){returnRegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*2 55+RegExp.$4*1}else{throw new Error("Not a valid IP address!")}}不过上面的程序如果不用正则表达式,而直接用split函数来分解可能更简单,程序如下:var ip="10.100.20.168"ip=ip.split(".")alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*匹配网址URL的正则表达式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?利用正则表达式去除字串中重复的字符的算法程序:[*注:此程序不正确]var s="abacabefgeeii"var s1=s.replace(/(.).*\1/g,"$1")var re=new RegExp("["+s1+"]","g")var s2=s.replace(re,"")alert(s1+s2)//结果为:abcefgi*注===============================如果var s = “abacabefggeeii”结果就不对了,结果为:abeicfgg正则表达式的能力有限===============================我原来在CSDN上发贴寻求一个表达式来实现去除重复字符的方法,最终没有找到,这是我能想到的最简单的实现方法。
js最常用 正则表达式
验证电话号码:^(\d3,4|\d{3,4}-)?\d{7,8}$:--正确格式为:XXXX-XXXXXXX,XXXX-XXXXXXXX,XXX-XXXXXXX,XXX-XXXXXXXX,XXXXXXX,XXXXXXXX。
验证由26个英文字母组成的字符串:^[A-Za-z]+$
验证由26个大写英文字母组成的字符串:^[A-Z]+$
验证由26个小写英文字母组成的字符串:^[a-z]+$
验证由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
验证由数字、26个英文字母或者下划线组成的字符串:^\w+$
return true;
else
alert("oh");
}
</SCRIPT>
<input type=text onblur=isEmail(this.value)>
7. 屏蔽关键字(这里屏蔽***和****)
<script language="javascript1.2">
function test() {
}
}
</script>
<form name=a onsubmit="return test()">
<textarea name="b" cols="40" wrap="VIRTUAL" rows="6"></textarea>
JavaScript正则表达式大全
在使用RegularExpressionValidator验证控件时的验证功能及其验证表达式介绍如下:
只能输入零和非零开头的数字:“^(0|[1-9][0-9]*)$”
只能输入有两位小数的正实数:“^[0-9]+(.[0-9]{2})?$”
只能输入有1-3位小数的正实数:“^[0-9]+(.[0-9]{1,3})?$”
只能输入由数字和26个英文字母组成的字符串:“^[A-Za-z0-9]+$”
只能输入由数字、26个英文字母或者下划线组成的字符串:“^w+$”
验证用户密码:“^[a-zA-Z]w{5,17}$”正确格式为:以字母开头,长度在6-18之间,
只能包含字符、数字和下划线。
验证是否含有^%&',;=?$"等字符:“[^%&',;=?$x22]+”
只能输入非零的正整数:“^+?[1-9][0-9]*$”
只能输入非零的负整数:“^-[1-9][0-9]*$”
只能输入长度为3的字符:“^.{3}$”
只能输入由26个英文字母组成的字符串:“^[A-Za-z]+$”
只能输入由26个大写英文字母组成的字符串:“^[A-Z]+$”
只能输入由26个小写英文字母组成的字符串:“^[a-z]+$”
用正则表达式限制只能输入全角字符: onkeyup="value="/blog/value.replace(/["^uFF00-uFFFF]/g,'') " onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,''))"
js常用正则表达式大全--如:数字,字符等
js常⽤正则表达式⼤全--如:数字,字符等⼀、校验数字的表达式1 数字:^[0-9]*$2 n位的数字:^\d{n}$3 ⾄少n位的数字:^\d{n,}$4 m-n位的数字:^\d{m,n}$5 零和⾮零开头的数字:^(0|[1-9][0-9]*)$6 ⾮零开头的最多带两位⼩数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$7 带1-2位⼩数的正数或负数:^(\-)?\d+(\.\d{1,2})?$8 正数、负数、和⼩数:^(\-|\+)?\d+(\.\d+)?$9 有两位⼩数的正实数:^[0-9]+(.[0-9]{2})?$10 有1~3位⼩数的正实数:^[0-9]+(.[0-9]{1,3})?$11 ⾮零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$12 ⾮零的负整数:^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$13 ⾮负整数:^\d+$ 或 ^[1-9]\d*|0$14 ⾮正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$15 ⾮负浮点数:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$16 ⾮正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$17 正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$18 负浮点数:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$19 浮点数:^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$⼆、校验字符的表达式1 汉字:^[\u4e00-\u9fa5]{0,}$2 英⽂和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$3 长度为3-20的所有字符:^.{3,20}$4 由26个英⽂字母组成的字符串:^[A-Za-z]+$5 由26个⼤写英⽂字母组成的字符串:^[A-Z]+$6 由26个⼩写英⽂字母组成的字符串:^[a-z]+$7 由数字和26个英⽂字母组成的字符串:^[A-Za-z0-9]+$8 由数字、26个英⽂字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$9 中⽂、英⽂、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$10 中⽂、英⽂、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$11 可以输⼊含有^%&',;=?$\"等字符:[^%&',;=?$\x22]+12 禁⽌输⼊含有~的字符:[^~\x22]+三、特殊需求表达式1 Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$2 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?3 InternetURL:[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$4 ⼿机号码:^(13[0-9]|14[0-9]|15[0-9]|166|17[0-9]|18[0-9]|19[8|9])\d{8}$4.1 var re = /^(1[3-9][0-9]{9})$/;//如:if (re.test(vmData.PHONE) === false) {alert("⼿机号格式不正确");return;}5 电话号码("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$6 国内电话号码(0511-*******、021-********):\d{3}-\d{8}|\d{4}-\d{7}7 18位⾝份证号码(数字、字母x结尾):^((\d{18})|([0-9x]{18})|([0-9X]{18}))$8 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$9 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$10 强密码(必须包含⼤⼩写字母和数字的组合,不能使⽤特殊字符,长度在8-10之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$11 ⽇期格式:^\d{4}-\d{1,2}-\d{1,2}12 ⼀年的12个⽉(01~09和1~12):^(0?[1-9]|1[0-2])$13 ⼀个⽉的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$14 钱的输⼊格式:15 1.有四种钱的表⽰形式我们可以接受:"10000.00" 和 "10,000.00", 和没有 "分" 的 "10000" 和 "10,000":^[1-9][0-9]*$16 2.这表⽰任意⼀个不以0开头的数字,但是,这也意味着⼀个字符"0"不通过,所以我们采⽤下⾯的形式:^(0|[1-9][0-9]*)$17 3.⼀个0或者⼀个不以0开头的数字.我们还可以允许开头有⼀个负号:^(0|-?[1-9][0-9]*)$18 4.这表⽰⼀个0或者⼀个可能为负的开头不为0的数字.让⽤户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下⾯我们要加的是说明可能的⼩数部分:^[0-9]+(.[0-9]+)?$19 5.必须说明的是,⼩数点后⾯⾄少应该有1位数,所以"10."是不通过的,但是 "10" 和 "10.2" 是通过的:^[0-9]+(.[0-9]{2})?$20 6.这样我们规定⼩数点后⾯必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$21 7.这样就允许⽤户只写⼀位⼩数.下⾯我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$22 8.1到3个数字,后⾯跟着任意个逗号+3个数字,逗号成为可选,⽽不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$23 备注:这就是最终结果了,别忘了"+"可以⽤"*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在⽤函数时去掉去掉那个反斜杠,⼀般的错误都在这⾥24 xml⽂件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$25 中⽂字符的正则表达式:[\u4e00-\u9fa5]26 双字节字符:[^\x00-\xff] (包括汉字在内,可以⽤来计算字符串的长度(⼀个双字节字符长度计2,ASCII字符计1))27 空⽩⾏的正则表达式:\n\s*\r (可以⽤来删除空⽩⾏)28 HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? /> (⽹上流传的版本太糟糕,上⾯这个也仅仅能部分,对于复杂的嵌套标记依旧⽆能为⼒)29 ⾸尾空⽩字符的正则表达式:^\s*|\s*$或(^\s*)|(\s*$) (可以⽤来删除⾏⾸⾏尾的空⽩字符(包括空格、制表符、换页符等等),⾮常有⽤的表达式)30 腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)31 中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)32 IP地址:\d+\.\d+\.\d+\.\d+ (提取IP地址时有⽤)33 IP地址:((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)) (由@飞龙三少提供,感谢共享)转载⾃:作者:出处:本⽂版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在⽂章页⾯明显位置给出原⽂连接,否则保留追究法律责任的权利。
js常用15个正则表达式
js常用15个正则表达式在JavaScript编程中,正则表达式是一种强大且常用的工具,用于处理字符串的模式匹配和替换。
本文将介绍JavaScript常用的15个正则表达式,并逐步回答相关问题,以帮助读者更好地理解和应用正则表达式。
1. 什么是正则表达式?正则表达式是一种用于匹配、查找和替换字符串的模式。
它由一个或多个字符组成,可以包含特殊字符和普通字符,并且可以通过一系列规则来定义匹配的模式。
2. 如何创建正则表达式?正则表达式可以使用两种方式来创建:- 字面量方式:使用斜杠(/)将模式括起来,例如:/pattern/- 构造函数方式:使用RegExp对象的构造函数来创建正则表达式,例如:new RegExp("pattern")3. 如何检测字符串是否与正则表达式匹配?JavaScript中的正则表达式对象提供了test()方法,用于检测一个字符串是否与正则表达式匹配。
例如:let pattern = /abc/;let str = "abcdefg";console.log(pattern.test(str)); true4. 如何匹配一个单词的开头或结尾?正则表达式中的元字符^和分别用于匹配字符串的开头和结尾。
例如:let pattern = /^abc/; 匹配以abc开头的字符串let pattern2 = /xyz/; 匹配以xyz结尾的字符串5. 如何匹配多个字符中的任意一个?正则表达式使用方括号([])来匹配多个字符中的任意一个。
例如:let pattern = /[abc]/; 匹配a、b或c6. 如何匹配一个或多个重复字符?正则表达式中的元字符+用于匹配前一个字符出现一次或多次。
例如:let pattern = /a+/; 匹配一个或多个连续的a7. 如何匹配0个或多个重复字符?正则表达式中的元字符*用于匹配前一个字符出现零次或多次。
js端口正则表达式
js端口正则表达式
在 JavaScript 中,可以使用正则表达式来验证端口号的格式。
以下是一个简单的正则表达式,用于验证端口号是否为一个 0 到 65535 之间的数字:
```javascript
var portRegex = /^(0|[1-9]\d{0,3}|[1-5]\d{4}|6[0-5]{2}[0-3][0-5])$/;
```
此正则表达式具体说明如下:
- `^`:表示输入字符串的开始位置。
- `(0|[1-9]\d{0,3}|[1-5]\d{4}|6[0-5]{2}[0-3][0-5])`:表示一个端口号的数字匹配模式,可以匹配以下四种情况:
- `0`:匹配数字 0。
- `[1-9]\d{0,3}`:匹配数字 1 到 9999。
- `[1-5]\d{4}`:匹配数字 10000 到 59999。
- `6[0-5]{2}[0-3][0-5]`:匹配数字 60000 到 65535。
- `$`:表示输入字符串的结束位置。
示例用法:
```javascript
var port = 8080;
if (portRegex.test(port)) {
console.log("端口号格式正确");
} else {
console.log("端口号格式错误");
}
```
注意:这个正则表达式仅验证端口号的格式是否正确,并不能真实判断端口号是否被占用或者允许使用。
js密码验证正则表达式
js密码验证正则表达式
当我们在开发一个网站或者应用程序时,常常需要对用户输入的密码进行验证,以确保密码的安全性。
在JavaScript中,我们可以使用正则表达式来验证密码的强度。
下面是一个简单的密码验证正则表达式:
```
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$/
```
这个正则表达式的含义是:
- `^` 匹配字符串的开头
- `(?=.*[a-z])` 至少包含一个小写字母
- `(?=.*[A-Z])` 至少包含一个大写字母
- `(?=.*\d)` 至少包含一个数字
- `[a-zA-Z\d]{8,}` 由大小写字母和数字组成,至少8个字符
- `$` 匹配字符串的结尾
这个正则表达式要求密码必须包含至少一个小写字母、一个大写字母和一个数字,且长度至少为8个字符。
这样可以确保密码的安全性,防止被猜测或者暴力破解。
除了上面的正则表达式,还有很多其他的密码验证正则表达式,可以根据实际需求进行选择和修改。
但是需要注意的是,正则表达式只是一种工具,不能完全替代其他安全措施,如密码加密、防止SQL注入等。
JS常用正则表达式
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配网址URL的正则表达式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
^-?[1-9]\d*$ //匹配整数
^[1-9]\d*|0$ //匹配非负整数(正整数 + 0)
^-[1-9]\d*|0$ //匹配非正整数(负整数 + 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮点数
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配负浮点数
只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"。
只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$"。
只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"。
只能输入由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]+$"。
只能输入由数字、26个英文字母或者下划线组成的字符串:"^\w+$"。
IdCard : /^\d{15}(\d{2}[A-Za-z0-9])?$/
Currency : /^\d+(\.\d+)?$/
100到5000正则js表达式
100到5000正则js表达式
正则表达式是一种用于匹配字符串模式的工具,可以用来匹配
特定的字符、数字、符号等。
对于匹配100到5000之间的数字,可
以使用如下的正则表达式:
\b(10[0-9]|1[1-9][0-9]|[2-4][0-9]{2}|5000)\b.
让我来解释一下这个表达式:
\b 表示单词边界,确保匹配的是整个单词而不是单词的一部分。
(10[0-9]|1[1-9][0-9]|[2-4][0-9]{2}|5000) 是一个分组,用
于匹配100到5000之间的数字。
10[0-9] 匹配100到109之间的数字。
1[1-9][0-9] 匹配110到199之间的数字。
[2-4][0-9]{2} 匹配200到499之间的数字。
5000 匹配5000这个数字。
这个正则表达式可以有效地匹配100到5000之间的数字,不会匹配到其他范围的数字或包含其他字符的字符串。
希望这个回答能够帮助到你。
JS正则表达式完整版
第21页
2012-6-1
正则表达式的字符类
第22页
2012-6-1
虽然正则表达式中的每个字符类都可以匹配一系列字符,但是每个字符类可
以匹配的字符数只能有一个。例如以下正则表达式中,可以匹配的字符有"a"、
"b"、"c"也可以匹配字符串"abc"中的任何一个字符,但是不能匹配整个"abc" 字符串。
document.write(str.indexOf("class",10)+"<br>"); //第1次出现"classes"的位置 document.write(str.indexOf("classes")+"<br>"); //最后1次出现"class"的位置 document.write(stIndexOf("class")+"<br>"); //从第11个字符开始向前搜索,最后1次出现"class"的位置 document.write(stIndexOf("class",10)+"<br>");
重复类
字符与字符类都只能匹配单个字符,例如正则表达式"/\d/"可以匹配数字 0-9,如果要匹配一个两位数,就必须使用两次"\d"也就是正则表达式 "/\d\d/"。如果要匹配一个四位数,那就要使用"/\d\d\d\d/"如果要匹配一个 18位的身份证号码,那就要使用18次“\d”。 为了解决以上问题,在正则表达式中提供了重复类,使用重复类可以指 定字符要重复的次数。最常见的重复类为"?"和"*",其中"*"代表可以匹配 前一个字符0次或多次。例如"/ad*/"可以匹配"a"、"ab"、"add"等字符。而 "?"可以匹配前一个字符0次或1次。例如"/ad?/"可以匹配"a","ad"但不能 匹配"add"。
JS正则表达式大全
JS正则表达式大全JS正则表达式大全【1】正则表达式中的特殊字符【留着以后查用】字符含意\ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界。
-或-对正则表达式功能字符的还原,如"*"匹配它前面元字符0次或多次,/a*/将匹配a,aa,aaa,加了"\"后,/a\*/将只匹配"a*"。
^ 匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a"$ 匹配一个输入或一行的结尾,/a$/匹配"An a",而不匹配"an A"* 匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa+ 匹配前面元字符1次或多次,/ba*/将匹配ba,baa,baaa? 匹配前面元字符0次或1次,/ba*/将匹配b,ba(x) 匹配x保存x在名为$1...$9的变量中x|y 匹配x或y{n} 精确匹配n次{n,} 匹配n次以上{n,m} 匹配n-m次[xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符)[^xyz] 不匹配这个集合中的任何一个字符[\b] 匹配一个退格符\b 匹配一个单词的边界\B 匹配一个单词的非边界\cX 这儿,X是一个控制符,/\cM/匹配Ctrl-M\d 匹配一个字数字符,/\d/ = /[0-9]/\D 匹配一个非字数字符,/\D/ = /[^0-9]/\n 匹配一个换行符\r 匹配一个回车符\s 匹配一个空白字符,包括\n,\r,\f,\t,\v等\S 匹配一个非空白字符,等于/[^\n\f\r\t\v]/\t 匹配一个制表符\v 匹配一个重直制表符\w 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[\w]匹配"$5.98"中的5,等于[a-zA-Z0-9]\W 匹配一个不可以组成单词的字符,如[\W]匹配"$5.98"中的$,等于[^a-zA-Z0-9]。
js 域名正则表达式
js 域名正则表达式
在JavaScript 中,可以使用正则表达式来匹配域名。
下面是一个常用的域名正则表达式模式:
```javascript
/^(?=^.{3,255}$)(a-zA-Z0-9)(-a-zA-Z0-9){0,62}(\.(a-zA-
Z0-9)(-a-zA-Z0-9){0,62})+$/
```
这个正则表达式模式可以匹配以字母和数字开头和结尾的域名,并且中间可以包含字母、数字、短横线和点号。
具体来说,它匹配的是以字母或数字开头和结尾,中间由字母、数字、短横线和点号组成的字符串,并且域名的长度至少为3个字符,最多为255个字符。
请注意,这个正则表达式只是一个常用的模式,具体的域名匹配规则可能因应用场景而异。
在实际应用中,你可能需要根据具体的需求和规则来调整正则表达式。
JS中常用的正则表达式
JS中常⽤的正则表达式以下收录⼀些我经常⽤到的正则表达式,因为⼯作场景中⽤到正则的地⽅⼏乎都跟validate插件的验证有关系,所以以下正则也是$.validator.addMethod() 的拓展:电话验证/*** ⼿机* */$.validator.addMethod("isMobile", function (value, element) {var reg = /^((1[3-8][0-9])+\d{8})$/;return this.optional(element) || (reg.test(value));}, "⼿机格式不正确");/*** 号码,固话与⼿机都可以* */jQuery.validator.addMethod("allPhone", function(v, e) {return this.optional(e) || /^(([0\+]\d{2,3}-)?(0\d{2,3})-)?(\d{7,8})(-(\d{3,}))?$/.test(v)||/^(1(([35][0-9])|(47)|[8][01236789]))\d{8}$/.test(v);},"请输⼊正确的号码:区号-电话号码/⼿机号");/*** 固话、传真,传真格式与固话是⼀样的* */jQuery.validator.addMethod("isTel", function(v, e) { return this.optional(e) || /^(([0\+]\d{2,3}-)?(0\d{2,3})-)?(\d{7,8})(-(\d{3,}))?$/.test(v);}, "请输⼊正确的电话号码");数字验证/*** 正整数* */$.validator.addMethod("ispositivenum", function (value, element) {var reg = /^([0]|[1-9]\d*)$/;return this.optional(element) || (reg.test(value));}, "请输⼊正整数");/*** 正数(包括浮点数)* */$.validator.addMethod("pFloatTwo", function (value, element) {return this.optional(element) || (/^([1-9]\d*|[0])(\.\d{1,2})?$/.test(value));}, "请输⼊正数,最多保留两位⼩数");/*** 价格(包括浮点数)最⼤值99999.99* */$.validator.addMethod("price", function (value, element) {return this.optional(element) || (value>0&&(/^([1-9]\d{0,4}|[0])(\.\d{1,2})?$/.test(value)));}, "请输⼊正数,最⼤值99999.99,最多保留两位⼩数");/*** 规格* */$.validator.addMethod("size", function (value, element) {var reg = /^[1-9]\d{0,4}$/;return this.optional(element) || (reg.test(value));}, "请输⼊正整数,最⼤值99999");/*** 数量* */$.validator.addMethod("qty", function (value, element) {return this.optional(element) || (value>0 && (/^([1-9]\d{0,4}|[0])(\.\d{1,3})?$/.test(value)));}, "请输⼊正数,最⼤值99999.999,最多保留三位⼩数");车牌号码验证/*** 车牌号码验证* */$.validator.addMethod("isCarNo", function(value, element){var reg = /^[\u4e00-\u9fa5]{1}[a-zA-Z]{1}[a-zA-Z_0-9]{4}[a-zA-Z_0-9_\u4e00-\u9fa5]$|^[a-zA-Z]{2}\d{7}$ /;return this.optional(element) || (reg.test(value));},"请输⼊正确的车牌号码,⼤⼩写不区分");⾝份证号验证包括15位18位⾝份证验证//⾝份证15位转18位中,计算校验位即最后⼀位function GetVerifyBit(id){var result;var nNum=eval(id.charAt(0)*7+id.charAt(1)*9+id.charAt(2)*10+id.charAt(3)*5+id.charAt(4)*8+id.charAt(5)*4+id.charAt(6)*2+id.charAt(7)*1+id.charAt(8)*6+id.charAt(9)*3+id.charAt(10)*7+id.charAt(11)*9+id.charAt(12)*10+id.charAt(13)*5+id.charAt(14)*8+id.charAt nNum=nNum%11;switch (nNum) {case 0 :result="1";break;case 1 :result="0";break;case 2 :result="X";break;case 3 :result="9";break;case 4 :result="8";break;case 5 :result="7";break;case 6 :result="6";break;case 7 :result="5";break;case 8 :result="4";break;case 9 :result="3";break;case 10 :result="2";break;}//document.write(result);return result;}/*功能:验证⾝份证号码是否有效提⽰信息:未输⼊或输⼊⾝份证号不正确!使⽤:validateIdCard(obj,birthday,s)//s:1为男,0为⼥返回:0,1,2,3,4,5*/function validateIdCard(obj,birthday,s){var aCity={11:"北京",12:"天津",13:"河北",14:"⼭西",15:"内蒙古",21:"辽宁",22:"吉林",23:"⿊龙江",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"⼭东",41:"河南",42:"湖北",43:"湖南",44:"⼴东",45:"⼴西",46:"海南",50:"重庆",51:"四川",52:"贵州",5 var iSum = 0;//var info = "";var strIDno = obj;if(birthday!=null){birthday = birthday.replace(/-/g,"/");}var idCardLength = strIDno.length;if(!/^\d{17}(\d|x)$/i.test(strIDno)&&!/^\d{15}$/i.test(strIDno)){return 1; //⾮法⾝份证号}if(aCity[parseInt(strIDno.substr(0,2))]==null){return 2;// ⾮法地区}// 15位⾝份证转换为18位if (idCardLength==15){sBirthday = "19" + strIDno.substr(6,2) + "-" + Number(strIDno.substr(8,2)) + "-" + Number(strIDno.substr(10,2));var d = new Date(sBirthday.replace(/-/g,"/"));var dd = d.getFullYear().toString() + "-" + (d.getMonth()+1) + "-" + d.getDate();var genderNo=strIDno.substr(14,1);if(sBirthday != dd){return 3; //⾮法⽣⽇}if(birthday==""){return 4;//您还没填写出⽣⽇期}if(birthday!=null && d.getTime()!=new Date(birthday).getTime()){return 5; //与出⽣⽇期不符}if(s!=null && s!=0 && s!=1){return 6;//您还没填写性别}if(s!=null && genderNo%2!=s){return 7;//与性别不符}strIDno=strIDno.substring(0,6)+"19"+strIDno.substring(6,15);strIDno=strIDno+GetVerifyBit(strIDno);}// 判断是否⼤于2078年,⼩于1900年var year =strIDno.substring(6,10);if (year<1900 || year>2078 ){return 3;//⾮法⽣⽇}/*if(){}*///18位⾝份证处理//在后⾯的运算中x相当于数字10,所以转换成astrIDno = strIDno.replace(/x$/i,"a");sBirthday=strIDno.substr(6,4)+"-"+Number(strIDno.substr(10,2))+"-"+Number(strIDno.substr(12,2));var d = new Date(sBirthday.replace(/-/g,"/"));var genderNo=strIDno.substr(16,1);if(sBirthday!=(d.getFullYear()+"-"+ (d.getMonth()+1) + "-" + d.getDate())){return 3; //⾮法⽣⽇}if(birthday==""){return 4;//您还没填写出⽣⽇期}if(birthday!=null && d.getTime()!=new Date(birthday).getTime()){return 5; //与出⽣⽇期不符}if(s!=null && s!=0 && s!=1){return 6;//您还没填写性别}if(s!=null && genderNo%2!=s){return 7;//与性别不符}// ⾝份证编码规范验证for(var i = 17;i>=0;i --){iSum += (Math.pow(2,i) % 11) * parseInt(strIDno.charAt(17 - i),11);}if(iSum%11!=1){return 1;// ⾮法⾝份证号}// 判断是否屏蔽⾝份证var words = new Array();words = new Array("11111119111111111","12121219121212121");for(var k=0;k<words.length;k++){if (strIDno.indexOf(words[k])!=-1){return 1;}}return 0;}//⾝份证(⽆关联验证)$.validator.addMethod("cretID", function(value, element, param){var n=validateIdCard(value);var error=["","⾮法⾝份证号","地区编号不合法","出⽣⽇期不合法"];param[1]=error[n];return this.optional(element) || n==0;},$.validator.format("{1}"));以上所述是⼩编给⼤家介绍的JS中常⽤的正则表达式,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JS正则表达式大全【2】about → javascript 2009-02-18 09:46 阅读145 评论0字号:大中小正则表达式是一个描述字符模式的对象。
JavaScript的RegExp对象和String对象定义了使用正则表达式来执行强大的模式匹配和文本检索与替换函数的方法.在JavaScript中,正则表达式是由一个RegExp对象表示的.当然,可以使用一个RegExp()构造函数来创建RegExp对象,也可以用JavaScript 1.2中的新添加的一个特殊语法来创建RegExp对象.就像字符串直接量被定义为包含在引号内的字符一样,正则表达式直接量也被定义为包含在一对斜杠(/)之间的字符.所以,JavaScript可能会包含如下的代码:var pattern = /s$/;这行代码创建一个新的RegExp对象,并将它赋给变量parttern.这个特殊的RegExp对象和所有以字母"s"结尾的字符串都匹配.用RegExp()也可以定义一个等价的正则表达式,代码如下:var pattern = new RegExp("s$");无论是用正则表达式直接量还是用构造函数RegExp(),创建一个RegExp对象都是比较容易的.较为困难的任务是用正则表达式语法来描述字符的模式.JavaScript采用的是Perl语言正则表达式语法的一个相当完整的子集.正则表达式的模式规范是由一系列字符构成的.大多数字符(包括所有字母数字字符)描述的都是按照字面意思进行匹配的字符.这样说来,正则表达式/java/就和所有包含子串"java" 的字符串相匹配.虽然正则表达式中的其它字符不是按照字面意思进行匹配的,但它们都具有特殊的意义.正则表达式/s$/ 包含两个字符.第一个特殊字符"s" 是按照字面意思与自身相匹配.第二个字符"$" 是一个特殊字符,它所匹配的是字符串的结尾.所以正则表达式/s$/ 匹配的就是以字母"s" 结尾的字符串.1.直接量字符我们已经发现了,在正则表达式中所有的字母字符和数字都是按照字面意思与自身相匹配的.JavaScript的正则表达式还通过以反斜杠(\)开头的转义序列支持某些非字母字符.例如,序列"\n" 在字符串中匹配的是一个直接量换行符.在正则表达式中,许多标点符号都有特殊的含义.下面是这些字符和它们的含义:正则表达式的直接量字符字符匹配________________________________字母数字字符自身\ f 换页符\ n 换行符\ r 回车\ t 制表符\ v 垂直制表符\ / 一个/ 直接量\ \ 一个\ 直接量\ . 一个 . 直接量\ * 一个* 直接量\ + 一个+ 直接量\ ? 一个? 直接量\ | 一个| 直接量\ ( 一个( 直接量\ ) 一个) 直接量\ [ 一个[ 直接量\ ] 一个] 直接量\ { 一个{ 直接量\ } 一个} 直接量\ XXX 由十进制数XXX 指定的ASCII码字符\ Xnn 由十六进制数nn 指定的ASCII码字符\ cX 控制字符^X. 例如, \cI等价于\t, \cJ等价于\n___________________________________________________如果想在正则表达式中使用特殊的标点符号,必须在它们之前加上一个"\" .2.字符类将单独的直接符放进中括号内就可以组合成字符类.一个字符类和它所包含的任何一个字符都匹配,所以正则表达式/ [abc] / 和字母"a" , "b" , "c" 中的任何一个都匹配.另外还可以定义否定字符类,这些类匹配的是除那些包含在中括号之内的字符外的所有字符.定义否定字符尖时,要将一个^ 符号作为从左中括号算起的第一个字符.正则表达式的集合是/ [a-zA-z0-9] / .由于某些字符类非常常用,所以JavaScript的正则表达式语法包含一些特殊字符和转义序列来表示这些常用的类.例如, \s 匹配的是空格符,制表符和其它空白符, \s匹配的则是空白符之外的任何字符.正则表灰式的字符类字符匹配____________________________________________________[...] 位于括号之内的任意字符[^...] 不在括号之中的任意字符. 除了换行符之外的任意字符,等价于[^\n]\w 任何单字字符, 等价于[a-zA-Z0-9]\W 任何非单字字符,等价于[^a-zA-Z0-9]\s 任何空白符,等价于[\ t \ n \ r \ f \ v]\S 任何非空白符,等价于[^\ t \ n \ r \ f \ v]\d 任何数字,等价于[0-9]\D 除了数字之外的任何字符,等价于[^0-9][\b] 一个退格直接量(特例)________________________________________________________________3.复制用以上的正则表式的语法,可以把两位数描述成/ \ d \ d /,把四位数描述成/ \d \ d \ d \ d /.但我们还没有一种方法可以用来描述具有任意多数位的数字或者是一个字符串.这个串由三个字符以及跟随在字母之后的一位数字构成.这些复杂的模式使用的正则表达式语法指定了该表达式中每个元素要重复出现的次数.指定复制的字符总是出现在它们所作用的模式后面.由于某种复制类型相当常用.所以有一些特殊的字符专门用于表示它们.例如: +号匹配的就是复制前一模式一次或多次的模式.下面的表列出了复制语法.先看一个例子:/\d{2, 4}/ //匹配2到4间的数字./\w{3} \d?/ //匹配三个单字字符和一个任意的数字./\s+java\s+/ //匹配字符串"java" ,并且该串前后可以有一个或多个空格./[^"] * / //匹配零个或多个非引号字符.正则表达式的复制字符字符含义__________________________________________________________________{n, m} 匹配前一项至少n次,但是不能超过m次{n, } 匹配前一项n次,或者多次{n} 匹配前一项恰好n次? 匹配前一项0次或1次,也就是说前一项是可选的. 等价于{0, 1}+ 匹配前一项1次或多次,等价于{1,}* 匹配前一项0次或多次.等价于{0,}___________________________________________________________________4.选择,分组和引用正则表达式的语法还包括指定选择项,对子表达式分组和引用前一子表达式的特殊字符.字符| 用于分隔供选择的字符.例如: /ab|cd|ef/ 匹配的是字符串"ab",或者是字符串"cd",又或者"ef". /\d{3}|[a-z]{4}/ 匹配的是要么是一个三位数,要么是四个小写字母.在正则表达式中括号具有几种作用.它的主要作用是把单独的项目分组成子表达式,以便可以像处理一个独立的单元那种用*、+或? 来处理那些项目.例如: /java(script) ?/ 匹配的是字符串"java",其后既可以有"script",也可以没有. /(ab|cd) + |ef) / 匹配的既可以是字符串"ef",也可以是字符串"ab" 或者"cd" 的一次或多次重复.在正则表达式中,括号的第二个用途是在完整的模式中定义子模式。
当一个正则表达式成功地和目标字符串相匹配时,可以从目标串中抽出和括号中的子模式相匹配的部分.例如,假定我们正在检索的模式是一个或多个字母后面跟随一位或多位数字,那么我们可以使用模式/ [a-z] + \ d+/.但是由于假定我们真正关心的是每个匹配尾部的数字,那么如果我们将模式的数字部分放在括号中(/ [a-z] + (\d+)/) ,我们就可以从所检索到的任何匹配中抽取数字了,之后我们会对此进行解析的.代括号的子表达式的另一个用途是,允许我们在同一正则表达式的后面引用前面的子表达式.这是通过在字符串\ 后加一位或多位数字来实现的.数字指的是代括号的子表达式在正则表达式中的位置.例如: \1 引用的是第一个代括号的子表达式. \3 引用的是第三个代括号的子表达式.注意,由于子表达式可以嵌套在其它子表达式中,所以它的位置是被计数的左括号的位置.例如:在下面的正则表达式被指定为\2:/([Jj]ava([Ss]cript)) \sis \s (fun\w*) /对正则表达式中前一子表达式的引用所指定的并不是那个子表达式的模式,而是与那个模式相匹配的文本.这样,引用就不只是帮助你输入正则表达式的重复部分的快捷方式了,它还实施了一条规约,那就是一个字符串各个分离的部分包含的是完全相同的字符.例如:下面的正则表达式匹配的就是位于单引号或双引号之内的所有字符.但是,它要求开始和结束的引号匹配(例如两个都是双引号或者都是单引号):/[' "] [^ ' "]*[' "]/如果要求开始和结束的引号匹配,我们可以使用如下的引用:/( [' "] ) [^ ' "] * \1/\1匹配的是第一个代括号的子表达式所匹配的模式.在这个例子中,它实施了一种规约,那就是开始的引号必须和结束的引号相匹配.注意,如果反斜杠后跟随的数字比代括号的子表达式数多,那么它就会被解析为一个十进制的转义序列,而不是一个引用.你可以坚持使用完整的三个字符来表示转义序列,这们就可以避免混淆了.例如,使用\044,而不是\44.下面是正则表达式的选择、分组和引用字符:字符含义____________________________________________________________________| 选择.匹配的要么是该符号左边的子表达式,要么它右边的子表达式(...) 分组.将几个项目分为一个单元.这个单元可由*、+、?和|等符号使用,而且还可以记住和这个组匹配的字符以供此后引用使用\n 和第n个分组所匹配的字符相匹配.分组是括号中的子表达式(可能是嵌套的).分组号是从左到右计数的左括号数____________________________________________________________________5.指定匹配的位置我们已经看到了,一个正则表达式中的许多元素才能够匹配字符串的一个字符.例如: \s 匹配的只是一个空白符.还有一些正则表达式的元素匹配的是字符之间宽度为0的空间,而不是实际的字符例如: \b 匹配的是一个词语的边界,也就是处于一个/w字字符和一个\w非字字符之间的边界.像\b 这样的字符并不指定任何一个匹配了的字符串中的字符,它们指定的是匹配所发生的合法位置.有时我们称这些元素为正则表达式的锚.因为它们将模式定位在检索字符串中的一个特定位置.最常用的锚元素是^, 它使模式依赖于字符串的开头,而锚元素$则使模式定位在字符串的末尾.例如:要匹配词"javascript" ,我们可以使用正则表达式/^ javascript $/. 如果我们想检索"java" 这个词自身(不像在"javascript" 中那样作为前缀),那么我们可以使用模式/\s java \s /, 它要求在词语java之前和之后都有空格.但是这样作有两个问题.第一: 如果"java"出现在一个字符的开头或者是结尾.该模式就不会与之匹配,除非在开头和结尾处有一个空格. 第二: 当这个模式找到一个与之匹配的字符时,它返回的匹配的字符串前端和后端都有空格,这并不是我们想要的.因此,我们使用词语的边界\b 来代替真正的空格符\s 进行匹配. 结果表达式是/\b java \b/.下面是正则表达式的锚字符:字符含义____________________________________________________________________^ 匹配的是字符的开头,在多行检索中,匹配的是一行的开头$ 匹配的是字符的结尾,在多行检索中,匹配的是一行的结尾\b 匹配的是一个词语的边界.简而言之就是位于字符\w 和\w之间的位置(注意:[\b]匹配的是退格符)\B 匹配的是非词语的边界的字符_____________________________________________________________________6.属性有关正则表达式的语法还有最后一个元素,那就是正则表达式的属性,它说明的是高级模式匹配的规则.和其它正则表达式语法不同,属性是在/ 符号之外说明的.即它们不出现在两个斜杠之间,而是位于第二个斜杠之后.javascript 1.2支持两个属性.属性i 说明模式匹配应该是大小写不敏感的.属性g 说明模式匹配应该是全局的.也就是说,应该找出被检索的字符串中所有的匹配.这两种属性联合起来就可以执行一个全局的,大小写不敏感的匹配.例如: 要执行一个大小不敏感的检索以找到词语"java" (或者是"java" 、"JAVA"等) 的第一个具体值,我们可以使用大小不敏感的正则表达式/\b java\b/i .如果要在一个字符串中找到"java" 所有的具体值,我们还可以添加属性g, 即/\b java \b/gi .。