2015-06-11 131 views
2

我想用正則表達式採取一個身體標記,然後用附加到它的東西替換。問題是,通過使用下面的正則表達式,它會失敗,因爲它選擇了所有超過我的正則表達式應該保持的限制。正則表達式匹配其邊界

正則表達式/<body.*[^>]>/i

測試字符串:<bla bla ><body class='a b ... what ever..d'><fo bar>

目標<body class='a b ... what ever..d'>

例如http://jsfiddle.net/bogdanm/qbccq79z/

問題:的 代替匹配<body class='a b ... d'>它選擇<body class='a b ... what ever..d'><fo bar>

回答

4

*是貪婪量詞並用否定類效果很好。您遇到的問題是使用量化符.,它使正則表達式引擎匹配(「讀取」)全部結束,查找除>之外的字符,然後是>。正則表達式引擎在最後的r>處找到這個組合。所以,你得到了錯誤的匹配。

您需要設置*量詞來[^>]否定字符類,並刪除.*是所有匹配到最後:

var testStr= "<bla bla ><body class='a b c d'><fo bar>"; 
var reg = /<body[^>]*>/i; 

var match = reg.exec(testStr); 

if(match != null){ 
    // we know regex matched 
    alert(match[0].toString() + '\n'); 
} 

這裏是updated demo

+1

的量詞是''也許你意味着角色或角色類? – Downgoat

+0

要清楚我明白我的正則表達式的錯誤部分:(請核心我) 選擇只要>不包含。這可能是一種神祕的解釋? –

+0

@ vihan1086:我可能會使用錯誤的措辭,我的意思是在'[^>]'字符類後使用'*'量詞。 –