如何用标签包装一组单词,JavaScript替换正则表达式

Chr*_*ris 6 javascript regex replace

我试图用HTML标签包装一些单词,因为我正在使用正则表达式.我几乎在那里:

这是我的正则表达式

/((apple|banana|cherry|orange)\b\s?)+/gi
Run Code Online (Sandbox Code Playgroud)

这是我的替代品:

<em>$&</em>
Run Code Online (Sandbox Code Playgroud)

这适用于我的示例文本:

Apple Banana apple cherry, Cherry orange and Oranges Apple, Banana
Run Code Online (Sandbox Code Playgroud)

结果是:

<em>Apple Banana apple cherry</em>, <em>Cherry orange </em>and Oranges <em>Apple</em>, <em>Banana</em>
Run Code Online (Sandbox Code Playgroud)

我可以务实并且与此同住但是我真的希望在最后一场比赛之后让它完美并且不包括空间.

即我的完美结果(看到"樱桃橙"之后左移的标签):

<em>Apple Banana apple cherry</em>, <em>Cherry orange</em> and Oranges <em>Apple</em>, <em>Banana</em>
Run Code Online (Sandbox Code Playgroud)

Kob*_*obi 4

JavaScript 不支持lookbehind。这是一种耻辱,因为我们本来可以这样做:

// doesn't work in JavaScript:
/((apple|banana|cherry|orange)\b\s?)+(?<!\s)/gi 
Run Code Online (Sandbox Code Playgroud)

然而,我们可以做的是将空格移到开头,并添加一个负的前瞻(因此 catch 不能以空格开头):

/(?!\s)(\s?\b(apple|banana|cherry|orange)\b)+/gi
Run Code Online (Sandbox Code Playgroud)

与您的代码略有不同的是,我还添加到\b了模式的开头,因此它不会appleSnapple.