0

[red][/red]のようないくつかの単純なBBcodeタグをHtml-Tagsに変換するJavaScript関数を書きたいと思います。replace()関数がそれを行うための最良の方法だと思います。簡単なテスト関数を書いて試してみましたが、うまくいかないようです。

/**
* @function
* @description Replaces the bb-tags with html-tags
*/
function bbToHtml(form) {
    debugger

    var text = form.text.value;
    bbTags = new Array("[red]", "[yellow]", "[green]", "[/red]", "[/yellow]", "[/green]");
    htmlTags = new Array("<font color='red'>", "<font color='yellow'>", "<font color='green'>", "</font>", "<font>", "</font>");

    for (var i = 0; i < bbTags.length; i++) {
        var re = new RegExp(bbTags[i], "g");
        text = text.replace(re, htmlTags[i]);
    }

    alert(text);
}

に変換"[red]hello[/red]"する必要"<font color='red'>hello</font>"がありますが、奇妙な文字列が表示されます。

なにが問題ですか?これは私の正規表現と関係があると思います。

4

3 に答える 3

2

[正規表現に]は特別な意味があり、エスケープする必要があります。さらに、コードを記述した方法で正規表現を使用する必要はなく、次のことができます。

function bbToHtml(form) {
    debugger

    var text = form.text.value;
    bbTags = new Array("[red]", "[yellow]", "[green]", "[/red]", "[/yellow]", "[/green]");
    htmlTags = new Array("<font color='red'>", "<font color='yellow'>", "<font color='green'>", "</font>", "<font>", "</font>");

    for (var i = 0; i < bbTags.length; i++) {
        while(text.indexOf(bbTags[i])!==-1){
            text = text.replace(bbTags[i], htmlTags[i]);
        }
    }

    alert(text);
}

ちなみに、配列の代わりに配列リテラルを使用できます。javascriptnew Array(comma seperated values)と同じです。[comma seperated values]また、次のように、配列をマップのように使用できます。

var bbTagsToHTML = {}
bbTagsToHtml["[red]"] = "<font color='red'>"

そしてそれを繰り返します。

正規表現もエスケープできるようにしたい場合は、正規表現で変数をどのように使用するかを参照してください。それを行う関数の場合。

手動で行うこともできます。"[red]"になります"\[red\]"(ブラケットがエスケープされました)。

于 2013-01-31T22:32:23.100 に答える
0

この行を変更するだけです

text = text.replace(re, htmlTags[i]);

の中へ

text = text.replace(bbTags[i], htmlTags[i]);

不要なコードを削除します。

replace引数として「通常の」(正規表現ではない)値でも機能します。

于 2013-01-31T22:34:34.317 に答える
0

あなたが正規表現でそれをしたいなら、あなたはたくさん単純化することができます。配列やループはありません:

var str = '[red]foo[/red] hello world [blue]hey[/blue]',
    re = /\[(\w+)\](.*)\[\/\1\]/g;

str = str.replace(re, '<font color="$1">$2</font>');

console.log(str);
//^ <font color="red">foo</font> hello world <font color="blue">hey</font>

また、補足として、これ以上使用されることはめったにありません。クラスでfontを使用することをお勧めします。span

于 2013-01-31T22:41:02.463 に答える