Javascript取代正则表达式不使用大写

时间:2016-02-21 02:36:31

标签: javascript jquery regex

这让我感到害怕......让我们做对,并用我已经拥有的代码显示我的问题:

if (data.term) {
    var search = data.term.toLowerCase();
    var element = data.text;
    var rgxp = new RegExp(search, 'gi');
    var repl = '<span style="color:#F00">' + data.term + '</span>';
    element = element.replace(rgxp, repl);
}
console.log(element);

data.text - &gt; “Pinus pinaster” (第一个词大写,第二个词不是)

在门外我把搜索词(或多个术语)全部放在小写中,因为人们可以输入任何东西...... Pin pIn PIN等等<​​/ p>

我的代码的最终结果类似于

<span style="color:#F00">Pin</span>us <span style="color:#F00">Pin</span>aster

注意第二个字......大写: - |

我开始使用我的正则表达式中的“g”标志...认为将其更改为“gi”会解决它但不会。

在绝望中......试过这个

if (data.term) {
    var search = data.t.toLowerCase();
    var element = data.text;
    var rgxp1 = new RegExp(search, 'g');
    var rgxp2 = new RegExp(search, 'gi');
    var repl = '<span style="color:#F00">' + data.term + '</span>';

    element = element.replace(rgxp1, repl);
    element = element.replace(rgxp2, repl);

}

但是我得到了

<span style="color:#F00">pin</span>us <span style="color:#F00">pin</span>aster

有任何帮助吗?我想突出显示搜索的术语,保留原始字符串。

2 个答案:

答案 0 :(得分:1)

您需要使用Regex Capture Groups

基本上,只需将正则表达式括在括号中,然后在替换字符串中使用$1来访问字符串中捕获的内容。这将保留原始案例。此外,同时使用gi标记。

示例:

if (data.term) {
    var search = data.term.toLowerCase();
    var element = data.text;
    var rgxp = new RegExp('(' + search + ')', 'gi'); // add parentheses to 'capture' the matched string for use later.
    var repl = '<span style="color:#F00">$1</span>'; // `$1` says, "grab whatever was captured and stick it here"

    element = element.replace(rgxp, repl);
    console.log(element); // <span style="color:#F00">Pin</span>us <span style="color:#F00">pin</span>aster
}

这是一个有效的JSFiddle。欢呼声。

答案 1 :(得分:0)

首先,jquery标记不是你问题的一部分,我会删除它。

在块内未分配data.text。 据我所知,repl应该包含你想要的字符串。