利用regexp匹配標籤內元素

"<script></script>hello, world<!--<script></script>-->hello, world<script></script>'<script></script>'-------\"<script></script>\"--------<script></script>".replace(/('[\s\S]*?'|"[\s\S]*?"|<!--[\s\S]*?-->)|(<script><\/script>)/g, function(all, $1, $2){
	console.log("$1----"+$1);
	console.log("$2----"+$2);
	return $1 ? $1 : $2 ? '<script>console.log(123);</script>' : '';
});


1.爲什麼要加上“?”

? 當 該字符緊跟在任何一個其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 後面時,匹配模式是非貪婪的。非貪婪模式儘可能少的匹配所搜索的字符串,而默認的貪婪模式則儘可能多的匹配所搜索的字符串。例如,對於字符串 "oooo",'o+?' 將匹配單個 "o",而 'o+' 將匹配所有 'o'

2.爲什麼不用 “.*?”,而是用“[\s\S]*?”

. 匹配除 "\n" 之外的任何單個字符。要匹配包括 '\n' 在內的任何字符,請使用象 '[.\n]' 的模式。
\s 匹配任何空白字符,包括空格、製表符、換頁符等等。等價於 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等價於 [^ \f\n\r\t\v]。

標籤內部會有各種分割符,所以不能用“.”
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章