这让我感到害怕......让我们做对,并用我已经拥有的代码显示我的问题:
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
有任何帮助吗?我想突出显示搜索的术语,保留原始字符串。
答案 0 :(得分:1)
您需要使用Regex Capture Groups。
基本上,只需将正则表达式括在括号中,然后在替换字符串中使用$1
来访问字符串中捕获的内容。这将保留原始案例。此外,同时使用g
和i
标记。
示例:
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应该包含你想要的字符串。