Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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,给我一根针和一个干草堆。。。我想在针的周围贴上粗体的标签。那么replace()将使用什么正则表达式呢?我希望空格成为delimeter,我希望搜索不区分大小写,我希望在搜索中忽略特殊字符(如@!#.()) 所以说针是“牛”,草堆是 cows, at www.cows.com, milk some COWS! 会变成 <b>cows</b>, at www.cows.com, milk some <b>COWS</b>! great band.

给我一根针和一个干草堆。。。我想在针的周围贴上粗体的标签。那么replace()将使用什么正则表达式呢?我希望空格成为delimeter,我希望搜索不区分大小写,我希望在搜索中忽略特殊字符(如@!#.())

所以说针是“牛”,草堆是

cows, at www.cows.com, milk some COWS!
会变成

<b>cows</b>, at www.cows.com, milk some <b>COWS</b>!
great band. <b>who. is. mgmt</b> btw?
会变成

<b>cows</b>, at www.cows.com, milk some <b>COWS</b>!
great band. <b>who. is. mgmt</b> btw?
很棒的乐队。谁是管理顺便说一下?
我现在有这个:

function updateHaystack(input, needle) {
    return input.replace(new RegExp('(^|\\s)(' + needle + ')(\\s|$)','ig'), '$1<b>$2</b>$3');
}
函数updateHaystack(输入,指针){
返回输入。替换(新的RegExp(“(^ | \\s)(“+needle+”)(\\s |$)”,“ig”),“$1$2$3”);
}
不幸的是,它没有用特殊字符连接的粗体字。。。例如!奶牛不会变成
!奶牛


谢谢

听起来好像
\b
应该做你想做的事。这是“单词边界”的零宽度匹配

函数updateHaystack(输入,指针){
返回输入。替换(新的RegExp('\\b('+needle+')\\b','ig'),'$1');
}

因此您需要在正则表达式中为特殊字符添加一个可选部分:

'(^|\\s)(' + needle + '[@!#.(),?]*)(\\s|$)'

如果要允许标点符号成为指针的一部分,只需添加它:

function updateHaystack(input, needle) {
    return input.replace(new RegExp('(^|\\s)(' + needle + '[!.,?]?)(\\s|$)','ig'), '$1<b>$2</b>$3');
}
函数updateHaystack(输入,指针){
返回输入。替换(新的RegExp(“(^ | \\s)(“+指针+”[!,?])(\\s |$),“ig”),“$1$2$3”);
}

允许任何非空白字符作为指针的一部分:

"cows, at www.cows.com, milk COWS!".replace(/(\s|^)(cow\S*)(\s|$)/ig, '$1<b>$2</b>$3');
// Will return: "<b>cows,</b> at www.cows.com, milk <b>COWS!</b>"
“奶牛,www.cows.com,奶牛!”。替换(/(\s | ^)(cow\s*)(\s |$)/ig,'1$2$3');
//将返回:“奶牛,在www.cows.com上,奶牛!”

为什么
new RegExp()
而不是literal regex语法?该代码段基于问题中的代码段。我只做了必要的更改以使其工作。我相信
(^ |\b)
中的
^
是多余的-字符串的开头是单词边界。嗯。。。我在想
/\b(cow\S*)\b/ig
来解释像
'(cows)
这样的字符串。不,想想看,这会在结束时中断。你的更好。为什么你不断转载这个:你在做什么?因为我把问题改了。您需要停止重新发布相同的问题。你两天前在这里问了它(),得到了一个很好的答案,并将其标记为已接受。如果你有一个次级或细微差别,你试图得到澄清,描述它这样。否则,您的问题将继续被否决并关闭。当您发布与前一个问题相关的新问题时,请做两件事:1。提供原始问题的链接。2.清楚明确地说明这个新问题的不同之处。