Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于强调匹配字符串的正则表达式_Javascript_Regex - Fatal编程技术网

Javascript 用于强调匹配字符串的正则表达式

Javascript 用于强调匹配字符串的正则表达式,javascript,regex,Javascript,Regex,我不熟悉正则表达式 我有一个搜索字符串,以及查询数据库的结果 在Javascript中,如何搜索字符串并将其强调或加粗 比方说 q="dolor"; result = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, Lorem ipsum dolor sit amet, consectetur adipiscing elit, Lorem ipsum dolor sit amet, consectetur adipiscing

我不熟悉正则表达式

我有一个搜索字符串,以及查询数据库的结果

在Javascript中,如何搜索字符串并将其强调或加粗

比方说

q="dolor";
result = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, Lorem ipsum dolor sit amet, consectetur adipiscing elit, Lorem ipsum dolor sit amet, consectetur adipiscing elit";
结束字符串应该具有

Lorem ipsum <em>dolor</em> sit amet, consectetur adipiscing elit, Lorem ipsum <em>dolor</em> sit amet, consectetur adipiscing elit, Lorem ipsum <em>dolor</em> sit amet, consectetur adipiscing elit
Lorem ipsum door sit amet,concetetur adipising elit,Lorem ipsum door sit amet,concetetur adipising elit,Lorem ipsum door sit amet,concetetur adipising elit

这里有一个很好的简单函数,它应该能做到这一点,只要将数据库字符串和子字符串传递给这个函数,它就会返回一个新字符串,其中子字符串的所有实例都用
标记包装起来

function emphasize(str, sub) {
  return str.replace(new RegExp(sub, 'g'), '<em>' + sub + '</em>'); 
}

var str = "Teenage mutant JavaScript ninja. Loves JavaScript",
    sub = "JavaScript";

emphasize(str, sub);
=> 'Teenage mutant <em>JavaScript</em> ninja. Loves <em>JavaScript</em>'
功能强调(str,sub){
返回str.replace(新的RegExp(sub,'g'),''+sub+'';
}
var str=“JavaScript忍者。热爱JavaScript”,
sub=“JavaScript”;
强调(str,sub);
=>“忍者。喜欢JavaScript'

请参阅中所述的字符串替换命令:

result=result.replace(/(dolor)/g,$1')

尝试以下操作:

var sentence = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, Lorem ipsum dolor sit amet, consectetur adipiscing elit, Lorem ipsum dolor sit amet, consectetur adipiscing elit"; 
var match = "dolor";
var replace = "<em>"+match+"</em>";
var regexp = new RegExp(match, "gi");
var output = sentence.replace(regexp, replace);
alert(output);
var-station=“Lorem ipsum door sit amet,concetetur adipising elit,Lorem ipsum door sit amet,concetetur adipising elit,concetetur adipising elit,concetetur adipsum door sit amet,concetetur adipising elit”;
var match=“dolor”;
var replace=“”+匹配+”;
var regexp=新的regexp(匹配“gi”);
var输出=句子.replace(regexp,replace);
警报(输出);


如果搜索字符串不是正则表达式,可以使用
split
并避免转义问题:

result.split(q).join('<em>' + q + '</em>')
result.split(q).join(“”+q+“”)
,顺便说一句,可能更合适

不区分大小写并不是那么简单,但我仍然不会使用正则表达式:

function highlight(text, find) {
    var lowercaseText = text.toLowerCase();
    var lowercaseFind = find.toLowerCase();
    var result = '';
    var lastIndex = 0;
    var i;

    while ((i = lowercaseText.indexOf(lowercaseFind, lastIndex)) !== -1) {
        result +=
            text.substring(lastIndex, i) +
            '<em>' + text.substring(i, i + find.length) + '</em>';

        lastIndex = i + find.length;
    }

    return result + text.substring(lastIndex);
}
函数高亮显示(文本,查找){
var lowercaseText=text.toLowerCase();
var lowercaseFind=find.toLowerCase();
var结果=“”;
var lastIndex=0;
var i;
while((i=lowercaseText.indexOf(lowercaseFind,lastIndex))!=-1){
结果+=
text.substring(lastIndex,i)+
''+text.substring(i,i+find.length)+'';
lastIndex=i+find.length;
}
返回结果+文本.子字符串(lastIndex);
}

它也很适合使用DOM。

我会在您的模式周围使用单词boundary
\b
,然后进行替换

var re = new RegExp("\\b" + q + "\\b", "gi");
result = result.replace(re, "<em>" + q + "</em>");
var re=new RegExp(“\\b”+q+”\\b,“gi”);
结果=结果。替换(re,“+q+”);

看起来不错,但你能用q取代多洛吗?变量本身不能硬编码搜索字符串,如果是,那么如何?请注意,您可以使用
$&
插入整个匹配项。例如:
var pattern=new RegExp(q,'g');结果=结果。替换(模式,$&')
但您需要注意任何特殊字符都被正确转义(例如“*”和“+”)。如果您只想替换一个文本字符串,您可以将其作为替换参数传递,如下所示:
result=result.replace(simpleStr,+simpleStr+'')
能否在expression@user2727195当然可以,请您区分大小写,@user2727195检查我的答案,这正是你需要的:如果我的答案帮助你,请考虑接受它作为正确的答案,TKS!忘了提到,dolor是变量q中的值,需要一个参数化的regexI,因为“global”标志允许更改匹配字符串的多个实例,所以我一直使用regexp。此示例只会更改匹配单词的第一个实例,因此无法使用。@josephnvu:
new RegExp(sub'g')
启用全局标志。好了。完美!逃避问题,我想,若写在文档中,那个么它是按em写的,我们能解决吗?哦,我正要说。如果是mustache,请使用三个大括号{{{html code here}}}}可能不区分大小写?边界的含义是什么?单词字符(\w)和非单词字符之间的边界。因此,例如
\bdolor\b
将匹配
dolor
,但它不会匹配另一个单词的一部分,例如它不会匹配
foodolor