javascript
JavaScript 正则表达式相关理解
1.使用正則的test、exec方法而且?guī)в術(shù)屬性進(jìn)行連續(xù)匹配的時(shí)候, 如果每次匹配之前?lastIndex屬性沒有清零。
<script>var str='123qweQWE125|2q3qw 3aa!*&%#)';var re=new RegExp("2",'g');for(var i=0;i<10;i++){console.log(re.test(str)+' '+re.lastIndex);}</script>
可以看到每次匹配都是從上次匹配結(jié)束的位置開始,匹配完后,下次會(huì)從頭開始匹配。如果沒有g(shù)屬性,則每次都是從頭開始匹配。
2.正則表達(dá)式字面量和使用構(gòu)造函數(shù)共享RegExp實(shí)例的問題
<script>var re = null,i;for (i=0;i<10;i++){re = /cat/g;console.log(re.test('catastronphe')+" "+re.lastIndex);}for (i=0;i<10;i++){re = new RegExp('cat','g');console.log(re.test('catastronphe')+" "+re.lastIndex);}</script>高程上說使用正則表達(dá)式字面量和使用RegExp構(gòu)造函數(shù)創(chuàng)建的正則表達(dá)式不一樣。在ECMAScript 3中,正則表達(dá)式字面量始終會(huì)共享同一個(gè)RegExp實(shí)例,而
使用構(gòu)造函數(shù)創(chuàng)建的每一個(gè)新RegExp實(shí)例都是一個(gè)新實(shí)例。但是在ECMAScript 5中明確規(guī)定,使用正則表達(dá)式字面量必須像直接調(diào)用RegExp構(gòu)造函數(shù)一樣,
每次都創(chuàng)造新的RegExp實(shí)例,所以在chrome上都是一樣的。
3.正則字面量和正則對(duì)象在匹配轉(zhuǎn)義字符時(shí)的差別
<script>var str='123qweQWE125|2q3qw 3aa!*&%#)'; // var re=new RegExp("\\s",'g');var re=/\s/g;for(var i=0;i<10;i++){console.log(re.exec(str)+' '+re.lastIndex);}</script>?代碼中正則字面量和正則對(duì)象是等效的,但是正則對(duì)象內(nèi)多了一個(gè)‘\’,我理解為正則對(duì)象內(nèi)設(shè)置匹配時(shí)用雙引號(hào),說明是一個(gè)字符串,在使用中字符串會(huì)轉(zhuǎn)換成正則
表達(dá)式時(shí)會(huì)去掉一層轉(zhuǎn)義字符。
?4.使用匹配子選項(xiàng)
<script>var a='name=yanghaipin';var b= a.match(/^(name)=(.+)/);console.log(b);</script>使用小括號(hào)將子選項(xiàng)包起來,match返回的是一個(gè)數(shù)組,第一個(gè)是完整匹配到的字符串,剩下的分別是匹配到的子選項(xiàng)。
?5.使用(?:)(?=)
<script>var str='windows 10 is great';var a=str.match(/windows (?=\d+)/);var b=str.match(/windows (?:\d+)/);var c=str.match(/windows (\d+)/);alert(a);//windowsalert(b);//windows 10alert(c);//windows 10,10</script>(?:)和(?=)都會(huì)作為匹配校驗(yàn),但是前者會(huì)出現(xiàn)在匹配到的字符串里面,后者不會(huì)出現(xiàn)。
?5. 關(guān)于 exec 和 match 方法的區(qū)別
http://www.cnblogs.com/withasi/archive/2012/04/23/2466933.html
6 可以使用 $ 來匹配字匹配項(xiàng)
var now = new Date().toLocaleDateString();console.log(now);var regdate=/^(\d{4})[/-](\d{1,2})[/-](\d{1,2})/;console.log(now.match(regdate));console.log(now.replace(regdate,"$1年$2月$3日"));轉(zhuǎn)載于:https://www.cnblogs.com/xueandsi/p/5970329.html
總結(jié)
以上是生活随笔為你收集整理的JavaScript 正则表达式相关理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pyQt4 for mac OS 10.
- 下一篇: elasticsearch完全匹配