LANG SELRCT

コードを書く場所についてはこちら

2018年4月1日日曜日

正規表現で<p>hello</p>の中からhelloに一致させる


HTMLソースの中で hello を見つけて前後の文字も含めて抜き出したい


>と<に囲まれているhelloとその前後の文字を抽出する例


/[^>]*hello[^<]*/
>以外の文字がいくつあっても helloを見つけてその前後の文字を見て <以外の文字ならいくつあっても抽出する

<div>
<p>「hello world」</p>
</div>



補足


?を使って >の後のhello の直後までを抽出する例


/[^>]*hello.*?/
>以外の文字がいくつあっても helloを見つけてその前後をみて その後に続く文字がいくつあってもhelloの直後までを抽出する(つまり「helloまでを抽出する)

<div>
<p>hello world」</p>
</div>



helloから<の手前までを抽出する例


/hello[^<]*/
helloを見つけてその後に続く文字を見て <以外の文字の場合いくつあっても抽出する

<div>
<p>hello world」</p>
</div>



補足2


<p> を直前に持って < を直後に持つ文字列を抽出する例


/(?<=<p>).*?(?=<)/
<p>を見つけて その直後に続く文字を見て <の直前の文字までを抽出する
言い換えると
対象の文字列の直前が <p> であり 対象の文字列の直後が < である文字列を抽出する
・(?<=pattern)は、patternで指定した文字列が直前にあるかどうかを見て
・(?=pattern)は、patternで指定した文字列が直後にあるかどうかを見て
その条件を満たす文字列を抽出する

<div>
<p>hello world」</p>
</div>




<p> を直前に持たず < を直後に持たない文字列を抽出する例


/(?<!<p>).*(?!<)/g
対象の文字列の直前が <p> でなく 対象の文字列の直後が < でない文字列を抽出する
・(?<!pattern)は、patternで指定した文字列が直前にないことを確認して
・(?=pattern)は、patternで指定した文字列が直後にないことを確認して
その条件を満たす文字列を抽出する
一行ごとに改行が入っているためそれぞれの行末の>の直後は\n
gフラグを付けると3行とも一致する

<div>
<p>「hello world」</p>
</div>




参考
正規表現
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions

Online regex tester and debugger
https://regex101.com/