javascript Regex相關應介紹

來源:互聯網
上載者:User

string 對象
1、str.match(RegExp)
在str中搜尋匹配RegExp的字串並儲存在一個數組內返回,
如果RegExp不是全域設定(/g),僅匹配一次 複製代碼 代碼如下:("abc112dwfwabcwef2abc3wfwabcasqf453abcqwf24j234h").match(/abc\d*/g);
//結果
["abc112", "abc", "abc3", "abc", "abc"]

該方法中,如果Regex不是全域匹配模式(g標記),第一個元素將是匹配的字串,其餘是正則中捕獲的字串,並且該數組具備2個屬性:
input 用於檢測的字串
index 匹配的字串在用於檢測字串中的開始位置。
(關於這2個屬性可以參考 RegExp.exec() 方法)
2、str.search(regExp)
返回符合匹配RegExp的第一個字串的位置,如果沒有匹配返回-1,全域標記沒有意義,因為只匹配一次,
該方法也忽略 regExp 的 lastIndex 屬性,並且總是從字串的開始進行檢索。
3、str.replace(RegExp,replaceText)
將匹配RegExp 的字串替換為replaceText,如果 RegExp 沒有全域設定,只匹配一次,使用全域模式將替換所有匹配的字串。
如果RegExp 中使用了捕獲分組匹配,則replaceText中的$具有特殊含義
$1、$2、...、$99 //與 RegExp 中的第 1 到第 99 個子運算式相匹配的文本。
$& // 與 regexp 相匹配的子串。
$` // 位於匹配子串左側的文本。
$' // 位於匹配子串右側的文本。
$$ // 匹配$符號自身。
注意,你需要考慮RegExp中捕獲分組的數量,如果你只設定了2個捕獲,那$3將不再具有特殊含義
("123ab12c11d_4532").replace(/a(b\d*)c(\d*)d/,"$1@$2-")
//將得到:
"123b12@11-_4532"
4、str.replace(RegExp,function)
str.replace 的第二個參數可以是函數,函數的傳回值將作為匹配字元的替換內容,
注意,如果要全域匹配RegExp仍然需要全域g標記。
函數的參數依次是:
匹配的字串,
配置的捕獲子串(多個),
匹配字串的開始位置,
用於匹配的原字串
注意,請根據RegExp中捕獲分組的設定數量來定義函數參數個數,如果參數太少將可能導致“匹配字串的開始位置” 和 “用於匹配的原字串” 不能在參數中出現,當然也可以在函數內使用arguments對象解決這個問題,arguments(arguments.length-2) 就是匹配字串的開始位置,arguments(arguments.length-1) 就是 用於匹配的原字串。 複製代碼 代碼如下:var newStr = ("123ab12c11d_4532").replace(/a(b\d*)c(\d*)d/g,function(s,s1,s2,pos,oldStr){
return "@"+s1+"@"+s2+"@";
}) ;
//將得到
"123@b12@11@_4532"

5、str.split(RegExp[,limit])
將字串str用符合匹配的字串分割成數組,limit 可選,用於限定返回的數組長度
("ada2afa4fcas6afa").split(/\d/,3) // "ada,afa,fcas"
6、RegExp.exec("str") 方法
在str中尋找匹配的字串,注意,每次運行該方法只匹配一次,要匹配多個需要將RegExp設定為/g,並多次運行exec()方法,每次匹配傳回值 result = RegExp.exec("str")
result為一個數組,這個數組長度為1,數組元素為找到的匹配的子串,
另外,這個數組被額外賦給了2 個屬性:
result.index 表示匹配的子串在原字串的開始位置
result.input 就是原字串
當再也無法找到符合匹配的子串時,返回 result = null,並設定 RegExp.lastIndex=0
RegExp.lastIndex 是Regex的屬性,表示當前將從字串的哪個位置開始匹配,初始值為0。
如果RegExp被設定為全域的,在匹配一個字串一次之後,使用同一個RegExp對一個新的字串進行匹配請先手動設定 RegExp.lastIndex=0
如果RegExp 不是全域匹配模式,在程式中又寫了一個迴圈,根基傳回值 result來決定是否終止匹配,從而試圖匹配完這個字串,那麼,只要有符合匹配條件的子串,就必定造成死迴圈,因為非全域匹配只對字串匹配一次,結果每次運行匹配操作都是匹配第一個子串,返回的 result 不為空白,這是個比較容易犯的錯誤。 複製代碼 代碼如下:var str = "1Visit W3School, W3School is a place to study web technology.";
var patt = new RegExp("W3School","g");
var result;
document.write(patt.lastIndex+"<br />");
document.write("=====================================<br />");
while ((result = patt.exec(str)) != null) {
document.write(patt.lastIndex+"<br />");
document.write(result.constructor.name+"<br />");
document.write(result.length+"<br />");
document.write(result[0]+"<br />");
document.write(result.index+"<br />");
document.write(result.input+"<br />");
document.write("=====================================<br />");
}
document.write(patt.lastIndex+"<br />");
// 運行結果:
=====================================
Array
W3School
Visit W3School, W3School is a place to study web technology.
=====================================
Array
W3School
Visit W3School, W3School is a place to study web technology.
=====================================

7、RegExp.test("str") 方法
該方法與 RegExp.exec 類似,不同的是僅返回true或false
RegExp.lastIndex 的含義是一樣的(這是RegExp的屬性,跟是使用test方法還是exec方法無關)
如果同一個RegExp 先後使用了test方法和exec方法,你可能需要手動設定 RegExp.lastIndex=0,這些方法是共用同一個RegExp對象的lastIndex 屬性的 複製代碼 代碼如下:var str = "1Visit W3School, W3School is a place to study web technology.";
var patt = new RegExp("W3School","g");
var result ;
result = patt.test(str);
alert(result); //true
result = patt.test(str);
alert(result); //true
result = patt.test(str);
alert(result); //false

IE9+ 、較新版本的 chrome、firefox 中 , str.match(reg) 執行完畢後,無論是否全域匹配,是否存在匹配結果 ,lastindex 被重設,reg.lastIndex = 0 , reg.test(str) 執行後,如果正則是非全域匹配的,lastindex 被重設, re.lastIndex = 0 在 IE8 及以下,正則匹配執行後除非沒有匹配結果,否則 re.lastIndex 是最後一個匹配字串的結尾字元的位置 +1,即lastIndex 沒有被重設

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.