HTMLソースの中で hello を見つけて前後の文字も含めて抜き出したい
>と<に囲まれているhelloとその前後の文字を抽出する例
/[^>]*hello[^<]*/
>以外の文字がいくつあっても helloを見つけてその前後の文字を見て <以外の文字ならいくつあっても抽出する
<div>
<p>「hello world」</p>
</div>
<p>「hello world」</p>
</div>
補足
?を使って >の後のhello の直後までを抽出する例
/[^>]*hello.*?/
>以外の文字がいくつあっても helloを見つけてその前後をみて その後に続く文字がいくつあってもhelloの直後までを抽出する(つまり「helloまでを抽出する)
<div>
<p>「hello world」</p>
</div>
<p>「hello world」</p>
</div>
helloから<の手前までを抽出する例
/hello[^<]*/
helloを見つけてその後に続く文字を見て <以外の文字の場合いくつあっても抽出する
<div>
<p>「hello world」</p>
</div>
<p>「hello world」</p>
</div>
補足2
<p> を直前に持って < を直後に持つ文字列を抽出する例
/(?<=<p>).*?(?=<)/
<p>を見つけて その直後に続く文字を見て <の直前の文字までを抽出する
言い換えると
対象の文字列の直前が <p> であり 対象の文字列の直後が < である文字列を抽出する
・(?<=pattern)は、patternで指定した文字列が直前にあるかどうかを見て
・(?=pattern)は、patternで指定した文字列が直後にあるかどうかを見て
その条件を満たす文字列を抽出する
言い換えると
対象の文字列の直前が <p> であり 対象の文字列の直後が < である文字列を抽出する
・(?<=pattern)は、patternで指定した文字列が直前にあるかどうかを見て
・(?=pattern)は、patternで指定した文字列が直後にあるかどうかを見て
その条件を満たす文字列を抽出する
<div>
<p>「hello world」</p>
</div>
<p>「hello world」</p>
</div>
<p> を直前に持たず < を直後に持たない文字列を抽出する例
/(?<!<p>).*(?!<)/g
対象の文字列の直前が <p> でなく 対象の文字列の直後が < でない文字列を抽出する
・(?<!pattern)は、patternで指定した文字列が直前にないことを確認して
・(?=pattern)は、patternで指定した文字列が直後にないことを確認して
その条件を満たす文字列を抽出する
一行ごとに改行が入っているためそれぞれの行末の>の直後は\n
gフラグを付けると3行とも一致する
・(?<!pattern)は、patternで指定した文字列が直前にないことを確認して
・(?=pattern)は、patternで指定した文字列が直後にないことを確認して
その条件を満たす文字列を抽出する
一行ごとに改行が入っているためそれぞれの行末の>の直後は\n
gフラグを付けると3行とも一致する
<div>
<p>「hello world」</p>
</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/