JavaScript正規表現(4)

1826 ワード

JavaScript正規表現(3)では、正規表現の基本的な動作を一緒に学び、また、いくつかの一般的な使用技術を引き出しました.以下は正規表現の実用的なテクニックをより深く理解します.
マッチング()による問題:まず、明確な点が必要であり、正規表現は一致する時に、万能ではなく、どの文字列も一致するものではない.次に本題に入ります.まず簡単な例を挙げて、()1+2*(3+5)にどうやってマッチしますか?考えてみたら、難しくないですよね.こうしてもいいです.
var text = '1+2*(3+5)';
var reg = /^.*\(.*\)/ig;
reg.test(text);//true
ついでに()内部の内容を捕獲します.
var text = '1+2*(3+5)';
var reg = /^.*\((.*)\)/ig;
reg.test(text);//true
RegExp.$1;//"3+5"
大丈夫です.前に述べたように、()を使用しないようにします.したがって、最初の.*.*ではない部分にマッチする必要があります.第二の(.*ではない部分にマッチする必要があります.正則を修正して、下記のコードを取得します.
var text = '1+2*(3+5)';
var reg = /^[^\(]*\(([^\)]*)\)/ig;
reg.test(text);//true
RegExp.$1;//"3+5"
いい感じですか?下に、私達は更に深く入り込んで、もし2つの括弧があるならば?たとえば:
var text = '1+2*(3+5*(2+3))';
var reg = /^[^\(]*\(([^\)]*)\)/ig;
reg.test(text);//true
RegExp.$1;//"3+5*(2+3"
明らかに、これは私達が欲しい答えではないです.おそらく一番目の括弧の中のすべての内容がほしいです.それは難しくないです.
var text = '1+2*(3+5*(2+3))';
var reg = /^[^\(]*\((.*)\)/ig;
reg.test(text);//true
RegExp.$1;//"3+5*(2+3)"
)[^\)]*に戻せばいいです.私たちは一歩多く考えていますが、もし第二の括弧の中の.*を手に入れたいなら、どうすればいいですか?これはちょっと複雑です.
var text = '1+2*(3+5*(2+3))';
var reg = /^[^\(]*\((?:[^\(]*\(([^\)]*)\))\)/ig;
reg.test(text);//true
RegExp.$1;//"2+3"
私の日は複雑すぎます.これは二階です.3階に入ると?4階は??第n層は、そのまま正則表現を書いても問題は解決されないのではないですか?正規表現は任意の深さのネスト構造にマッチしないという結論が得られます.じゃ、本当にしょうがないですか?いいえ、昔はループをしていた時に使ったものを覚えていますか?ここでは、括弧内の内容を解析するために、1つの階層を使用することができます.もちろん、環視を使うのもよくないです.全部で何階の括弧があるか分かりません.
JavaScript正規表現(1)JavaScript正規表現(2)JavaScript正規表現(3)JavaScript正規表現(4)