Javascript 修改(粗体)某个单词之前的所有单词

Javascript 修改(粗体)某个单词之前的所有单词,javascript,jquery,html,regex,Javascript,Jquery,Html,Regex,我在一个网站上列出了近1000个奖项。每个奖项都有自己的跨度,并遵循其格式 x for y 例如: <span>Broadcast Film Critics Association Award for Best Director</span> 我在字符f、o和r之前(包括)搜索最多2个单词。但是我想匹配单词“for”,而不仅仅是字符,而且我不想在加粗的内容中包含“for”。Regex似乎是这里的最佳解决方案,但是我建议使用匹配组的Regex,以便在中添加标记时可以重建

我在一个网站上列出了近1000个奖项。每个奖项都有自己的跨度,并遵循其格式

x for y
例如:

<span>Broadcast Film Critics Association Award for Best Director</span>

我在字符f、o和r之前(包括)搜索最多2个单词。但是我想匹配单词“for”,而不仅仅是字符,而且我不想在加粗的内容中包含“for”。

Regex似乎是这里的最佳解决方案,但是我建议使用匹配组的Regex,以便在中添加
标记时可以重建字符串。试试这个:

$('span').html(function(i, v) {
    var matches = /(.+)(for.+)/gi.exec(v);
    return '<b>' + matches[1] + '</b>' + matches[2];
});
$('span').html(函数(i,v){
var matches=/(.+)(for.+)/gi.exec(v);
返回“”+匹配项[1]+“”+匹配项[2];
});

这假设第一个
之前的所有内容都是您需要匹配的。如果您担心字符串中的
有多个
,则需要不同的解决方案

(.*?\b)for
这是“不情愿地匹配并捕获所有内容,直到第一个分词,然后是
for

你也可以使用

.*?\b(?=for)
您也可以使用正则表达式来实现它,如下所示

$('span').html(function(index, content) {
    return content.replace(/(.+)(for.+)/gi, '<strong>$1</strong>$2');
});
$('span').html(函数(索引、内容){
返回内容。替换(/(.+)(for.+)/gi,$1$2');
});

Demo@

在积极匹配方面也很好;不情愿还是侵略性比赛的问题取决于课程数据,这对我来说非常有效!如果你不介意的话,我正在尝试分析它的工作原理(我对regex是新手)。你能指出我是不是理解错了<代码>/
包含表达式本身<代码>(.+)匹配第二组中未包含的每个字符的一组
(for.+)
匹配一组以“for”开头并继续向前的每个字符
gi
在返回之前搜索所有匹配项,并且匹配项不区分大小写
.exec(v)
获取正则表达式并从两个不同的组中创建一个数组。
.exec(v)
中的
v
做什么?
v
是jquerys
html()
方法提供的当前html值
$('span').html(function(index, content) {
    return content.replace(/(.+)(for.+)/gi, '<strong>$1</strong>$2');
});