正規表現のpattern+?pattern*?、(?!pattern)、(?:pattern)

1168 ワード

最近phpのドキュメントを見ると、読めない正則がたくさん見つかりました.もとは基礎ができていただけでしたが、今回はいくつかの特殊な正則パターンをまとめてみました.js正規表現の基礎は正規表現のまとめを参照することができる.
pattern+?、pattern*?
この2つは、怠惰なマッチングを表すのによく使われます.すなわち、条件に合致するできるだけ短い文字列をマッチングします.デフォルトでは+と*は貪欲なマッチングです.つまり、できるだけ長い文字列をマッチングし、その後に追加しますか?怠惰マッチングをしたいことを表す.
(?!pattern)
フィルタ条件を表し、文字列がpatternに合致するとフィルタされます.ログを分析するときに役立ちます.例えば、infoタグを含むログをフィルタリングするには^(?!*info).*$を書くことができます.
(?:pattern)
このルールは主にパフォーマンスを最適化するためであり、マッチングには影響しません.カッコ内のサブエクスプレッションが一致した結果は、返す必要もなく$1$2のような逆参照もされないことを示します.
js例

    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.*?\/>/));