前提・実現したいこと
replaceに引数を渡したいです
発生している問題・エラーメッセージ
以下のソースコードは、例えば
'mother'=>1
の部分を
<span class="mother">'mother'</span>=>1
のようにしています。
つまり const obj に一致したものを span で囲むために replace を使っている状況です。
こうして span がついた次の状態ですが、これにさらに
<span class="mother">'mother'</span>=>1
次のようにクラスを追加したいので、その方法をお尋ねしたいと思います。
<span class="info_base mother">'mother'</span>=>1
該当のソースコード
html
1<p> 2Your mother is very young.<br> 3 4[ 5['mother'=>1,'color'=>'red','new_color'=>'pink','new_address'=>'tokyo'], 6['mother'=>2,'color'=>'yellow','new_color'=>'purple','new_address'=>'florida'], 7] 8</p>
js
1let p = $('p').text(); 2 3const obj = { 4 info_base: ["'mother'","'color'"], 5 info_new : ["'new_color'","'new_address'"] 6}; 7$.each(obj, function(key, cols) { 8 cols.forEach(col => { 9 p = p.replace(new RegExp(col,'g'), replacer); 10 }); 11}); 12 13$('p').html( p ); 14 15function replacer( match ) { 16 const class_name = match.slice(1).slice(0,-1); // 「'」を除いてクラス名に 17 return `<span class="${class_name}">${match}</span>`; 18} 19
試したこと
obj のキーをクラスに付与したいということなので、以下のように replacer に key という引数を渡せばできると踏んだのですができませんでした。
js
1$.each(obj, function(key, cols) { 2 cols.forEach(col => { 3 // p = p.replace(new RegExp(col), replacer); 4 // ↓ 変更 5 p = p.replace(new RegExp(col), replacer(key) ); 6 }); 7}); 8 9$('p').html( p ); 10 11function replacer( match ) { 12 const class_name = match.slice(1).slice(0,-1); // 「'」を除いてクラス名に 13 // return `<span class="${class_name}">${match}</span>`; 14 // ↓ 変更 15 return `<span class="${key} ${class_name}">${match}</span>`; 16} 17
調べてみますと replace の第二引数( 上記replacer )は match や offset など使える引数が決まっているみたい(?)でして、replacer(key) という書き方ができないのかもしれません。
ですけど、それならばどうずればできるのか全くわからなくなってしまいました。
補足情報
正規表現にgのフラグを追加しました
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/11 05:05
2020/05/11 05:50 編集
2020/05/11 06:06