05正则表达式
Posted mingliangge
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了05正则表达式相关的知识,希望对你有一定的参考价值。
正则表达式:该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
正则表达式的文字模式:普通字符(如26个字母或者数字)、特殊字符(如./等)组成。
注:正则表达式里面不要添加无意义的空格符
正则匹配字符串
// i ignoreCase //忽略大小写 // m multiline //多行匹配 // g global //全局匹配
// 字面量方式
var str = “skfjsdlfkjsdfsSb”; var pattern = /sb/i; //默认区分大小写,但是在/后面添加i就会忽略大小写 console.log(pattern.test(str));//test,匹配到就返回true,否则false console.log(pattern.exec(str));//exec,匹配到就返回该字符串的数组,否则返回null
//构造函数方式
var strr = “skfjsdlfkjsdfsSb”; var patterns = new RegExp(‘sb‘,‘i‘);//默认区分大小写,但是多加一个参数i后 就会忽略大小写 alert(patterns.test(strr));//test,匹配到就返回true,否则false alert(patterns.exec(strr));//exec,匹配到就返回该字符串的数组,否则返回null
注:一般情况下使用字面量的方式,但是当匹配的内容是一个变量的时候 就用构造函数的方式
转义符()
在构造函数中的s、 等带有转义字符的,要多加一个转义字符 ,即\s、\n
表示换行:
表示制表键:
表示//://
表示\:\\
字符类([])
表示abc中的任意一个:[abc]
表示abc以外的所有字符:[^abc]
表示0-9:[0-9] 或者 d
除了0-9:[^0-9] 或者 D
表示a-z:[a-z]
表示A-Z:[A-Z]
表示中文汉字:[u4e00-u9fa5]
除了换行符以外:[^ ] 或者 .
表示字母数字下划线:[a-zA-Z0-9_] 或者 w
除了字母数字下划线:[^a-zA-Z0-9_] 或者 W
表示空格或制表符或Unicode的空白字符:s
除了空格或制表符或Unicode的空白字符:S
重复(量词{})
匹配 0 个数字:{0} 或者 .
匹配 >=0 个数字:{0,} 或者 *
匹配 0 <= X <= 1 个数字:{0,1} 或者 ?
匹配 >= 1 个数字:{1,} 或者 +
匹配3个数字:d{3}
匹配>=3个数字:d{3,}
匹配 3 <= X <= 5 个数字:d{3,5}
匹配a和b之间的字符(包括a、b): a.*b
非贪婪的重复
默认情况下都是贪婪匹配,在量词后面加上 ? 就会变成非贪婪匹配
var pattern = /a+/; //默认情况有多少个a就匹配多少个a var pattern = /a+?/; //转为非贪婪匹配后,在条件允许情况下,尽可能匹配一个a
var str = ‘aaabbb‘; var pp = /a.*b/; //aaabbb var bb = /a.*?b/; //aaab
选择(|)
var str = ‘abc‘; var pattern = /a|b|c/; //从左到右,只匹配abc中的其中一个。
分组( () )
var str = ‘abcd‘; var pattern = /(ab(c))d/; //第一个值忽略分组abcd,第二个值最外层分组ab,第三个值为嵌套的分组c var pattern = /(ab)cd1/; // 1表示第一个分组的内容 var pattern = /(?:ab)/; //?:表示非捕获,即在exec等里面不会展示出来
注:index为匹配到内容的起始位置,input为字符串的所有内容
首尾匹配(^ $)
var str = ‘ab cd‘; var pattern = /^a/; //匹配a开头的字符 var pattern = /cd$/; //匹配cd结尾的字符
位置匹配之边界匹配()
就是w与W之间的位置,反过来理解就是,如果的前面和后面都是w,则不匹配
前瞻性与负前瞻性匹配
var str = “javascript”; var pattern = /java(?=script)/; //前瞻性:如果java后面跟script,那么就匹配到。 var pattern1 = /java(?!script)/; //负前瞻性:如果java后面不是script,那么就能匹配到。
RegExp对象的实例方法
var str =‘asdf‘; var pa = /a/; pa.exec(str):匹配到的话就返回匹配到的字符串数组,匹配不到的话就返回null pa.test(str):匹配到的话就返回true,匹配不到的话就返回false pa.toString():将pa里面的正则表达式,转换成字符串 pa.toLocaleString():将pa里面的正则表达式,转换为具有本地特色的字符串 pa.valueOf():为pa本身 注: var a = ‘ab ab ab‘; var pattern = /ab/; // 循环输出exec时,默认情况下找到的ab的index为第一个, var pattern = /ab/g; //循环输出exec时,全局模式下找到的ab的index为0、3、6,若再循环多一次就为null,然后从头来。
RegExp对象的实例属性
var str = ‘ab‘;
var pa = /ab/ig;
pa.ignoreCase:判断pa是否写i,返回Boolean
pa.global:判断pa是否写g,返回Boolean
pa.multiline:判断pa是否写m,返回Boolean
pa.source:返回pa字面量形式的字符串
pa.lastIndex:一般在全局匹配下,第一次匹配到的值后,记录index;第二次在第一次值之后匹配,而不是从头匹配找到第二个匹配到的值的index;若匹配不到了lastIndex为0,然后继续…
构造函数属性
var str = ‘ab‘; var pa = /ab/ig; pa.test(str); //必须要执行一次pa,后面的RegExp才能产生作用 console.log(RegExp.input); //输出str的内容 console.log(RegExp.$_); //输出str的内容 console.log(RegExp.lastMatch); //最近一次匹配到的字符串 console.log(RegExp[‘$&‘]); //最近一次匹配到的字符串 console.log(RegExp.leftContext); //最近一次匹配到的字符串 ,左边的剩余字符 console.log(RegExp[‘$`‘]); //最近一次匹配到的字符串 ,左边的剩余字符 console.log(RegExp.rightContext); //最近一次匹配到的字符串 ,右边的剩余字符 console.log(RegExp[“$‘”]); //最近一次匹配到的字符串 ,右边的剩余字符 console.log(RegExp.lastParen); //上一次通过()分组里面捕获的内容 console.log(RegExp[“$+”]); //上一次通过()分组里面捕获的内容 console.log(RegExp.$1); //字面量中1表示第一个分组,构造函数中$1表示第一个分组,只支持$1-9
String对象方法
var str = ‘js jsjlsdkf‘; var pattern = /js/;
//search
console.log(str.search(pattern)); //在str中查找与pattern匹配到的内容,找到返回index位置(无论在全局匹配还是一般匹配,只会返回第一个查到到的位置),找不到返回-1
//match
console.log(str.match(pattern)); //一般匹配下跟exec一样,匹配到的话就返回匹配到的字符串数组,匹配不到的话就返回null var pattern = /(j)s/g; console.log(str.match(pattern)); //全局匹配下,找到所有匹配到的内容返回(没有index或者input等属性),忽略所有分组
注:exec与match的区别:exec是RegExp对象属性方法,match是String属性方法。
exec无论是否全局匹配都会返回分组中匹配到的内容,都只会返回当前匹配到的一个内容,而不是全部返回。
match非全局的情况下才返回分组中匹配到的内容,全局匹配只能匹配到所有匹配到的字符。
m multiline //多行匹配,要在全局匹配g下 和 首匹配/尾匹配 才能展现出效果
var str = ‘1.js 2.js 3.js‘; var pattern = /js$/mg; //不加m表示只有一行,只会匹配到最后一个js;加了m之后表示3行,所以匹配3个js console.log(str.match(pattern));
//split
var str = ‘sd,wer,er,wer,dfg‘; var pattern = /,/; //左右两边 没有空格的情况下 var pattern = /s*,s*/; //左右两边 有多个空格的情况下 console.log(str.split(pattern)); //将字符串用逗号隔开,转变为数组
//replace
var str = ‘js you js abc dd‘; var pattern = /js/g; //要在全局模式下,不然只会替换一个js console.log(str.replace(pattern,‘html‘)); //将js替换成html
var pattern = /(j)s/g; document.write(str.replace(pattern,function($al,$1){ return $al; //这时$al表示匹配到的所有内容 //$1表示第一个分组的内容 })); //将js替换成html
以上是关于05正则表达式的主要内容,如果未能解决你的问题,请参考以下文章
正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性