@saku-11

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

javascript 正規表現

解決したいこと

javascriptのRegExp()とfontタグを使ってコードを色付けしてくれる
というようなプログラムを作成しているのですが、演算子に色付けする際に前に生成されていたhtmlタグの<>、カラーコードを指定する際の=も変換されてしまいます。
htmlタグには引っかからず、かつその他の条件を指定するためにはどのような表現になるでしょうか。

該当するソースコード

RegExpでエスケープするには\が二ついるそうです。

const ope = ["\\+", "-", "\\*", "\\/", "=", ">", "<"]
let contents = "const a = 1 + 2 - 3"
for (i in ope) {
    contents = contents.replace(RegExp(ope[i], "g"), `<font color=#ffffff>${ope[i]}<font>`)
}
console.log(contents)

結果

const a <font color=#ffffff><<font>font color=#ffffff<font color=#ffffff><<font>font color=#ffffff>><font color=#ffffff><<font>font>=<font color=#ffffff><<font>font<font color=#ffffff><<font>font color=#ffffff>><font color=#ffffff><<font>font> 1 <font color=#ffffff><<font>font color<font color=#ffffff><<font>font color=#ffffff<font color=#ffffff><<font>font color=#ffffff>><font color=#ffffff><<font>font>=<font color=#ffffff><<font>font<font color=#ffffff><<font>font color=#ffffff>><font color=#ffffff><<font>font>#ffffff<font color=#ffffff><<font>font color=#ffffff>><font color=#ffffff><<font>font>\+<font color=#ffffff><<font>font<font color=#ffffff><<font>font color=#ffffff>><font color=#ffffff><<font>font> 2 <font color=#ffffff><<font>font color<font color=#ffffff><<font>font color=#ffffff<font color=#ffffff><<font>font color=#ffffff>><font color=#ffffff><<font>font>=<font color=#ffffff><<font>font<font color=#ffffff><<font>font color=#ffffff>><font color=#ffffff><<font>font>#ffffff<font color=#ffffff><<font>font color=#ffffff>><font color=#ffffff><<font>font>-<font color=#ffffff><<font>font<font color=#ffffff><<font>font color=#ffffff>><font color=#ffffff><<font>font> 3

おそらく無限ループなのでタイムアウトしました

0 likes

1Answer

for文ではなく、正規表現でどれかに一致するとき置換するというような形でいいのではないでしょうか?
あと、fontの終了タグに/がなかったので追加が必要だと思います。
ご注意ください。

let contents = "const a = 1 + 2 - 3"
contents = contents.replace(RegExp("\\+|-|\\*|\\/|=|>|<","g"), `<font color=#ffffff>$&</font>`)
console.log(contents)

//const a <font color=#ffffff>=</font> 1 <font color=#ffffff>+</font> 2 <font color=#ffffff>-</font> 3
1Like

Comments

  1. @saku-11

    Questioner

    ありがとうございます!!試してみます
  2. @saku-11

    Questioner

    できました!!
  3. 解決したようでよかったです!

Your answer might help someone💌