現在、とあるソースコードを読んで学習を行っているのですが、
その中の正規表現を使用したコードにつきまして、
理解が追いつかない状況におります。
対象言語: javascript
対象ソースコード: riot.js
lang
1var regex = /^<([\w\-]+)>([^\x00]*[\w\/}]>$)?([^\x00]*?)^<\/\1>/gim; 2src.replace(regex, function(a,b,c){ /*省略*/ })
問題のコードを一部抜粋させていただきました。
コードについて補足させていただきます。
上記のコードは独自シンタックスを含んだhtmlタグのマッチに使用されています。
つまり、
lang
1<something> 2 <h3>title</h3> 3 <ul> 4 <li>list</li> 5 </ul> 6 7 // javascript code 8 var hoge = 'hoge'; 9</something>
仮に上記のような文字列だった場合に、
それぞれの部分文字列には、
1つ目 {タグ名: something}
2つ目 {<something></something>内のjavascriptを除いたhtml:
問題のコードがどのような処理を担っているのかは理解できたのですが、
そこで使用されている正規表現が何故そのように記述されているのかが理解できません。
下記に理解が足らない部分を列挙させていただきます。
-
2つ目と3つ目の部分文字列に
[^\x00]
が含まれていますが、具体的にはどのような文字を除くように指定されているのでしょうか? -
2つ目の部分文字列の最後に
$
が含まれていますが、これは2つ目の部分文字列が文末に存在するかの判定という認識で良いのでしょうか、また、その場合にはその後の正規表現の判定は無視されるのでしょうか? -
同様に後方参照の直前にある
^
は、文頭に後方参照が存在するという認識で良いのでしょうか?
特に、後者の2点に悩まされています。
上手く説明ができておらず、申し訳ございません。
私は今まで^
と$
は/^.*$/
のようにそれぞれ先端と末端([^]
は除く)でしか使用していなかったために、困惑しております。
恐らくg
とm
のフラグが使用されていることに関係があるのではと考えているのですが、糸口が見つけられずにいます。
是非皆様のお力をお借りできればと思います。
よろしくお願いいたします。
binzo

回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。