javascript
JavaScript 正则表达式相关理解
1.使用正則的test、exec方法而且帶有g屬性進行連續匹配的時候, 如果每次匹配之前?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>
可以看到每次匹配都是從上次匹配結束的位置開始,匹配完后,下次會從頭開始匹配。如果沒有g屬性,則每次都是從頭開始匹配。
2.正則表達式字面量和使用構造函數共享RegExp實例的問題
<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>高程上說使用正則表達式字面量和使用RegExp構造函數創建的正則表達式不一樣。在ECMAScript 3中,正則表達式字面量始終會共享同一個RegExp實例,而
使用構造函數創建的每一個新RegExp實例都是一個新實例。但是在ECMAScript 5中明確規定,使用正則表達式字面量必須像直接調用RegExp構造函數一樣,
每次都創造新的RegExp實例,所以在chrome上都是一樣的。
3.正則字面量和正則對象在匹配轉義字符時的差別
<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>?代碼中正則字面量和正則對象是等效的,但是正則對象內多了一個‘\’,我理解為正則對象內設置匹配時用雙引號,說明是一個字符串,在使用中字符串會轉換成正則
表達式時會去掉一層轉義字符。
?4.使用匹配子選項
<script>var a='name=yanghaipin';var b= a.match(/^(name)=(.+)/);console.log(b);</script>使用小括號將子選項包起來,match返回的是一個數組,第一個是完整匹配到的字符串,剩下的分別是匹配到的子選項。
?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>(?:)和(?=)都會作為匹配校驗,但是前者會出現在匹配到的字符串里面,后者不會出現。
?5. 關于 exec 和 match 方法的區別
http://www.cnblogs.com/withasi/archive/2012/04/23/2466933.html
6 可以使用 $ 來匹配字匹配項
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日"));轉載于:https://www.cnblogs.com/xueandsi/p/5970329.html
總結
以上是生活随笔為你收集整理的JavaScript 正则表达式相关理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pyQt4 for mac OS 10.
- 下一篇: KnockoutJS 3.X API 第