当前位置: 首页 > Web前端 > HTML5

[关于Javascript]---正则表达式基础知识

时间:2023-04-05 11:23:17 HTML5

1.元字符\b字界\d数字[0-9]\w英文数字下划线[a-z0-9_]\s空白字符[\t\v\n\r\f]\thorizo??ntaltab,\vverticaltab,\nlinefeed,\rcarriagereturn,\fformfeedinversion\Bnon-wordboundary\D[^0-9]\W[^a-z0-9_]\S非空白字符[^\t\v\n\r\f]。很少使用任何字符。*不包含换行符的任何数量的字符都是贪婪匹配的。?惰性非贪婪匹配\u4e00-\u9fa5中文2.量词{m,n}匹配m-n次,匹配m次{n,}匹配n次还是更多次{n}匹配n次?0或1,yesorNone等于{0,1}+1或更多等于{1,}*0或n可以任意等于{0,}eg:/\d?///匹配1or0numbers/\d{2,4}///匹配2到4个数字/\s+java\s+///匹配1个或多个空格的字符串java/[^(]*///匹配1个或多个openingbrackets/^[^\.]///匹配任意以非开头的字符3.设置字符类[abc]匹配a/b/c的任意字符[^abc]匹配除abc以外的任意字符[a-z]匹配从a到z的任意字符//注:里面的-表示范围如'ahd-fj-k'.replace(/[a-z]/g,'A')//输出"AAA-AA-A//如果我想把斜杠也换掉,有两种方法1.使用转义符\'ahd-fj-k'.replace(/[a-z\-]/g,'B')//OutputBBBBBBBB2.添加一个额外的-'ahd-fj-k'.replace(/[a-z-]/g,'B')//OutputBBBBBBBB//()在集合中默认转义像这样//'(122)do('.replace(/[(\d)]/g,'A')OutputAAAAAdoA//具体转义范围不确定,欢迎普及补充4.Branch123|34|567//匹配123或34or5675.边界startend^//代表startwhere[]代表非$//表示结尾六、修饰符g//如果不写全局匹配,匹配完第一个就停止i//忽略大小写m//忽略换行//上面3可以叠加使用七、贪心模式和非贪心模式js默认是贪心模式,也就是最大可能的匹配。想改成非贪心模式,后面加个量词?例子:'123456789'.replace(/\d{3,6}/g,'X')//输出XX//贪心模式先匹配最多的6个数>X,其余3个数也认为匹配再来一个X'123456789'.replace(/\d{3,6}?/g,'X')//输出XXX//非贪心模式先匹配最少需要的3个数一次>3X8,分组而reference和capturinggrouping是正则化中非常强大的功能,可以使上述量词函数和一组字符语法:(content):识别为可捕获组(?:content):识别为非捕获组/([0-9])[a-z]+\1{3}/.test('2aa222')//真/([0-9]+)[a-z]+\1/.test('12aa12')//true/([0-9]+)[a-z]+\1/.test('12aa13')//false//这里有个问题需要注意"\1"组不代表多个数,而是对应组/<([a-z]+)>.*<\/\1>/.test('sdlk

sdjks
sdkl')//true并不是所有使用()的都可以被捕获和分组。下面是说非捕获组可以提高性能和简化逻辑使用:**(***)//标识为可捕获组(?:***)//标识为非捕获组**示例:+1a1b2c3d4'a1b2c3d4'.replace(/(\d)/g,function($1){return$1*1+1})//输出a2b3c4d5和格式2015-12-25作为2015年12月25日'2015-12-25'.replace(/(\d{4})-(\d{2})-(\d{2})/g,'$2month$3day$1year')//输出十二月25,2015非捕获示例:'2015-12-25'.replace(/(\d{4})-(?:\d{2})-(\d{2})/g,'$2month$3day$1year')//第二个()里面有?:所以它没有被捕获为一个组。所以$1对应2015,$2对应25//输出25th,$3,20159.前瞻正则表达式从文本头部开始稳步解析,文本尾部的方向称为“前”。简单理解为从左往右看就是向前检查是否是一个断言。Look-behind/反方向look-behind但是javascript不支持look-behind。名称正则含义Positivelookaheadexp(?=assert)followedbyassertNegativelookaheadexp(?!assert)exp的前面是assertPositivelookbehindexp(?<=assert)Javascript不支持negativelookbehindexp(?结尾的标签'

laka'.replace(/<[^<>]+>/g,'')//简单版匹配邮箱地址:英文数字下划线@英文数字.com/^\w+\@[a-z0-9]+(.com)$/.test('@qq.com')//网上看到的邮箱地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$网上有很多regex可视化网站,也很有意思,可以复制查看。常规可视化网页可以在线验证多个常规集市。仅供参考。欢迎指正和补充。谢谢