正則表達式之 pattern+?、pattern*?、(?!pattern)、(?:pattern)

最近看 php 的文檔發現很多看不懂的正則,原來之前只是會了基礎,這次來總結下幾個特殊的正則模式。js 正則表達式基礎可參考正則表達式總結

pattern+?、pattern*?

這兩個比較常用,表示懶惰匹配,即匹配符合條件的儘量短的字符串。默認情況下 + 和 * 是貪婪匹配,即匹配儘可能長的字符串,在它們後面加上 ? 表示想要進行懶惰匹配。

(?!pattern)

表示一個過濾條件,若字符串符合 pattern 則將其過濾掉。在分析日誌時很有用,例如想過濾掉包含 info 標記的日誌可以寫 ^(?!.*info).*$。

(?:pattern)

這條規則主要是爲了優化性能,對匹配沒有影響。它表示括號內的子表達式匹配的結果不需要返回也不會被 $1 $2 之類的反向引用。

js 示例

<script>
    var str3 = "haaaaaaaaaaaaaaaabaaaaaaaaaaaab";
    console.log(str3.match(/h.*b/));
    console.log(str3.match(/h.*?b/));
    console.log(str3.match(/ha+/));
    console.log(str3.match(/ha+?/));
    var str = "hello123back, hello456back";
    console.log(str.match(/hello(?!456).*?back/));
    console.log((str.match(/(hello).*/)));
    console.log((str.match(/(?:hello).*/)));
    var str2 = '<input type="text" id="xxx" name="xxx" value="xxx" /><input type="hidden" id="xxx" name="xxx" value="xxx" />';
    console.log(str2.match(/<input[^>]*?hidden.*?\/>/));
</script>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章