正規表現の先読みと後読み
記号、名称ともにわかりにくすぎるmrsekut.icon
正規表現のアンカーである
これ、タイトルに「JavaSccriptの」を加えるべき #??
正規表現の先読み
正規表現の後読み
https://abicky.net/2010/05/30/135112/
この記事の(後半の)説明の仕方がわかりやすい
正規表現のアンカーという概念を理解し、
肯定でマッチする箇所を理解し、
否定はそれ以外全て、と考えるとわかりやすい
ここに描いている図をかいておくとパット見で思い出せそうmrsekut.icon
面倒くさいので描いていない
↑この記事が一番わかりやすかったmrsekut.icon
↓の各リンクもアンカーに触れない前提の話しか書いていないので追記しておきたい
4種類
table:_
肯定的 否定的
先読み 肯定的先読み(?=pattern) 否定的先読み(?!pattern)
後読み 肯定的後読み(?<=pattern) 否定的後読み(?<!pattern)
JSの正規表現の後読みはSafariではサポートされていないことに注意
例題
ハッシュタグが連結した文字列を分割したい
入力: "#hoge#piyo#fuga"
出力: ["#hoge","#piyo","#fuga"]
ヒント
"#hoge#piyo#fuga".split("#")とすると、["hoge","piyo","fuga"]となり、#が含まれないのでダメ
.split(/ここに正規表現/g)という形式になる
.split()は、正規表現でマッチしたものを区切りとしてわける、という関数
区切りとして使われたものは結果には含まれない
ここで、先読み後読みが正規表現のアンカーであることを使うとうまくいく
アンカーは、文字と文字の間にマッチする
#の直前にマッチするようにすれば、#を消さずに出力できる
答え
"#hoge#piyo#fuga".split(/(?=#)/g)
https://stackoverflow.com/a/25221523
https://zenn.dev/usamik26/articles/regex-lookahead
Denoのregexbuilderはもっと直感的に書けるmrsekut.icon