Javascript正则表达式:大海捞针 相关(但不相同):
给我一根针和一个干草堆。。。我想在针的周围贴上粗体的标签。那么replace()将使用什么正则表达式呢?我希望空格成为delimeter,我希望搜索不区分大小写,我希望在搜索中忽略特殊字符(如@!#.()) 所以说针是“牛”,草堆是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.
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.清楚明确地说明这个新问题的不同之处。