質問: path) { return page; } }) ``` コメントに記載の通り、変数`path`、`array`に代入している`index`の部分は条件によって`summary`や`product`になる場合もあり、その条件は変数`path`、`array`では別の条件になるため、変数`path`に`index`が代入されている、変数`array`には`summary`が代入されている。 ということが発生します。 これらを踏まえ、現在例に示したようなif文で`result`を得ているのですが、このif文の箇所を正規表現などを使って同じ結果が得られるようにしたいのですが、どのように書けばいいのかご教示いただけると幸いです。 (なぜ正規表現かと言うのは、勉強の一つとして自分に与えた課題です。) 尚、if文にある、`${page}/`は、トレイリングスラッシュを考慮しての記述となります。 勉強のためと思って挑戦し、ググりながら試してみたものの、正規表現をどのように組み合わせれば、このif文と同様の結果が得られるのかたどり着けず、本末転倒は十分承知で、恥ずかしながらここに質問した次第です。 そもそも正規表現で実現が可能なのかも不明なところでもあるのですが、どなたか知見をお借りできれば幸いです。 どうぞ、よろしくお願いします。
回答: そもそもサンプルコードの`find`の使い方が変なので、実際には何をやりたいのか誤解している可能性もありますが、`find`に与える関数引数は真理値(普通なら`true`または`false`)を返すものでないといけません。文字列を返しても真理値に変換してくれるでしょうが、あまり変な書き方はしない方が良いでしょう。 ``` const result = array.find(page => page === path || `${page}/` === path); ``` と言うことで上記を前提に話を進めますが、要は「`path`が`page`と完全に一致する、または、`page`に`'/'`を付加したものと完全に一致すする」かの判定を行えば良いことになります。 ある特定の文字やパターンがあってもなくても良いと言うのは、正規表現では、`?`で表せますから、次のように修正すれば良いでしょう。 ``` const result = array.find(page => { var pageRegex = new RegExp(page+'/?'); return pageRegex.test(path); }); ``` `page`に正規表現としての特殊文字が含まれるのであれば、その部分をエスケープしてやらないといけないのですが、ご質問内のコメントから、その必要はないものとして簡略化してあります。 試してもらえればわかりますが、`path`の値が`'index'`でも`'index/'`でも、`result`の値は`'index'`になるはずです。 ``` const path = 'index/'; // indexの部分はsummary / productの場合もあります const array = ['index']; // indexの部分はsummary / productの場合もあります const result = array.find(page => { var pageRegex = new RegExp(page+'/?'); return pageRegex.test(path); }); console.log(result); ``` 何かご質問の意図を誤解しているとか、よくわからないとかがありましたら、ご質問自体を編集するか、この回答へのコメントを付けるかしてお知らせください。