正则表达式

RegExp?

正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为”元字符”)。
正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。正则表达式是烦琐的,但它是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感。

语法
var patt=new RegExp(pattern,modifiers);
或更简单的方法
var patt=/pattern/modifiers;

模式描述了一个表达式模型。
修饰符(modifiers)描述了检索是否是全局,区分大小写等。
i - 修饰符是用来执行不区分大小写的匹配。
g - 修饰符是用于执行全文的搜索(而不是在找到第一个就停止查找,而是找到所有的匹配)
m - 多行匹配模式

在字符串中不区分大小写找”runoob”:var patt1 = /runoob/i; 全文查找 “is”: var patt1=/is/g;
全文查找和不区分大小写搜索 “is” var patt1=/is/gi;
注意:当使用构造函数创造正则对象时,需要常规的字符转义规则(在前面加反斜杠 \)。比如,以下是等价的:

var re = new RegExp("\\w+");
var re = /\w+/;

与正则表达式相关的方法
String的方法:match()返回匹配的数组;
String的方法:replace()返回替换后的字符串;
String的方法:search()参数也可以接受正则表达式,返回第一个与之匹配的子串的起始位置,如果找不到返回-1;
String的方法:split()参数也可以接受正则表达式;
RegExp的方法: exec()返回匹配的数组;
RegExp的方法: test()返回Boolean;

元字符(只列出常用部分)
^ —-匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置。
RegExpMultiline 也匹配 ‘\n’ 或 ‘\r’ 之前的位置。
* —-匹配前面的子表达式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等价于{0,}。
+ —-匹配前面的子表达式一次或多次。例如,’zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。
? —-匹配前面的子表达式零次或一次。例如,”do(es)?” 可以匹配 “do” 或 “does” 中的”do” 。? 等价于 {0,1}。
当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。
非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。
例如,对于字符串 “oooo”,’o+?’ 将匹配单个 “o”,而 ‘o+’ 将匹配所有 ‘o’。
( ) —-标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ( 和 )。
{n} —-n 是一个非负整数。匹配确定的 n 次。例如,’o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。
{n,} —-n 是一个非负整数。至少匹配n 次。例如,’o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。
‘o{1,}’ 等价于 ‘o+’。’o{0,}’ 则等价于 ‘o*’。
{n,m} —-m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,”o{1,3}” 将匹配 “fooooood” 中的前三个 o。
‘o{0,1}’ 等价于 ‘o?’。请注意在逗号和两个数之间不能有空格。
x|y —-匹配 x 或 y。例如,’z|food’ 能匹配 “z” 或 “food”。’(z|f)ood’ 则匹配 “zood” 或 “food”。
[xyz] —-字符集合。匹配所包含的任意一个字符。例如, ‘[abc]’ 可以匹配 “plain” 中的 ‘a’。
[^xyz] —-负值字符集合。匹配未包含的任意字符。例如, ‘[^abc]’ 可以匹配 “plain” 中的’p’、’l’、’i’、’n’。
[a-z] —-字符范围。匹配指定范围内的任意字符。例如,’[a-z]’ 可以匹配 ‘a’ 到 ‘z’ 范围内的任意小写字母字符。
[^a-z] —–负值字符范围。匹配任何不在指定范围内的任意字符。例如,’[^a-z]’ 可以匹配任何不在 ‘a’ 到 ‘z’ 范围内的任意字符。
\b —–匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b’ 可以匹配”never” 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’。
\B —-匹配非单词边界。’er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’。
\d —-匹配一个数字字符。等价于 [0-9]。 \D 匹配一个非数字字符。等价于 [^0-9]。
\s —-匹配任何Unicode空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S —-匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\w —-匹配包括下划线的任何ASCII字符组成的单词。等价于’[A-Za-z0-9_]’。 \W 匹配任何非单词字符。等价于 ‘[^A-Za-z0-9_]’。
\num —-匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,’(.)\1’ 匹配两个连续的相同字符。

常用的正则表达式整理
//1.匹配开头的空格多次或者0次和结尾的空格多次或者0次
var str1 = "  ab c ";
var reg1 = /(^\s*)|(\s*$)/g;
lg(reg1.test(str1));

//2.用户名
var str2 = "AAAz3_545--";
var reg2 = /^[a-zA-Z0-9_-]{3,16}$/;//包含字母数字下划线及连字符的3-16位用户名
lg(reg2.test(str2));

//3.密码
var reg3 = /^[a-zA-Z0-9_-]{6,16}$/;

//4.手机号码
var str4 = "13611243092";
var reg4 = /^1[34578]\d{9}$/;
//var reg4 = /^1(3|4|5|7|8)\d{9}$/;
lg(reg4.test(str4));

//5.国内电话
var str5 = "010-12345678";
var reg5 = /\d{3}-\d{8}|\d{4}-\{7,8}/;
lg(reg5.test(str5));

//6.电子邮箱
var str6 = "yongyuan-123@qq.com.cm.cn";
// var reg6 = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;//只允许英文字母、数字、下划线、英文句号、以及中划线组成
var reg6 = /^[\w-]+@[\w-]+(\.[\w-]+)+$/;
lg(reg6.test(str6));

//7.中文字符
var reg7 = /[\u4e00-\u9fa5]/;

//8.至少四位腾讯QQ
var str8 = "173714659";
var reg8 = /^[1-9]\d{4,}$/;//第一位不能为0
lg(reg8.test(str8));

//9.匹配网址
var reg9 = /^[a-zA-z]+\:\/\/[^\s]*$/;
var reg9 = /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/;//匹配url

//10.邮政编码
var str10 = "741000";
var reg10 = /[1-9]\d{5}(?!\d)/;
lg(reg10.test(str10));

//11.匹配18位身份证号
var str11 = "620502199105196131";
// var reg11 = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/;
var reg11 = /^\d{17}(\d|X|x)$/;
lg(reg11.test(str11));

//12.非负整数
var reg12 = /^[1-9]\d*|0$/;

//13.非正整数
var reg13 = /^-[1-9]\d*|0$/;

//14.整数
var reg14 = /^-?[1-9]\d*$/;

//15.正的浮点数:123.123 / 0.123
var reg15 = /^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$/;

//16.HTML 标签 
var str16 = "<div>123</div>";
var reg16 = /^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$/;
lg(reg16.test(str16));
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值