まーた正規表現が動かない、かと思ったらreplaceが動いていない。
なんだかんだとやってみたら
文字列リテラルとString型は違いますよっていうのを間違っていたらしい。
いやしかし、replaceの戻り値を代入してるんだからそんなの関係なくないか。
// ok var txt = textarea.value; var tmp = new String(txt.match(/tekitou/)); tmp = tmp.replace(/t/, "s"); // sekisou // out var txt = textarea.value; var tmp = txt.match(/tekitou/); tmp = tmp.replace(/t/, "s"); // error // out var txt = textarea.value; var tmp = ""; tmp = txt.match(/tekitou/); tmp = tmp.replace(/t/, "s"); // error
最初は2番目、次に3番目、最後に一番上を試した。バグ原因はreplaceというかString型のマッチングなので内容は分かりやすく整理。
原因が特定できずにここまでたどり着くのにかなり時間がかかった。
いや、そりゃさ、型が違うってのはわかるんですけど、これ代入してるんですよ?足し算じゃないのよ?
代入で型変換になるとは思ってなかった。
そしてなんで2番目がアウトなのか全くわからない。txtを操作するのは普通にできるのに。
別件で、なぜか検索に失敗する文字列がある。
文字列の頭が>のせいなのかなと思っているけどこれもよくわからない。原因が同じな可能性もあるのでこれから検証。
まーとにかくブラックボックスの多い言語だ。