0

私はこの再帰関数にかなり困惑しています。テキストボックス内の単語を強調表示するために使用していますが、奇妙な出力が得られます:

 should be:
 #define
 testing #define

 but instead it's:

 testing #define
 testing #define

ここにコードがあります

function replace_all( text, old_str, new_str ){

    index_of = text.indexOf( old_str );

    if( index_of != -1 ){

            old_text = text.substring( 0, index_of );
            new_text = text.substring( index_of + old_str.length );

            new_text = replace_all( new_text, old_str, new_str );

            text = old_text + new_str + new_text;
    }
    return text;
}

関数の何が問題なのかについてのアイデアはありますか? 古いキーワードをすべて、最後に見つかったキーワードに置き換えているようです。

4

2 に答える 2

1

コメントを回答に変換する:

これは次のようにはるかに簡単になります。

function replace_all(text,old_str,new_str) {
    var old_regex = old_str).replace(/[.\\+*?\[\^\]$(){}=!<>|:-]/g, '\\$&');
    // the above line escapes any characters that may interfere with regex behaviour
    return text.replace(new RegExp(old_regex,"g"),new_str);
}
于 2013-04-01T12:32:23.147 に答える