我试图用HTML标签包装一些单词,因为我正在使用正则表达式。我快到了:
这是我的正则表达式
/((apple|banana|cherry|orange)\b\s?)+/gi
这是我的替代品:
<em>$&</em>
完全适用于我的示例文本:
Apple Banana apple cherry, Cherry orange and Oranges Apple, Banana
结果是:
<em>Apple Banana apple cherry</em>, <em>Cherry orange </em>and Oranges <em>Apple</em>, <em>Banana</em>
我可以务实并与之共存,但我会非常希望在最后一场比赛之后让比赛更加完美。
即。我的完美结果是(看到“樱桃橙”之后左移的标签):
<em>Apple Banana apple cherry</em>, <em>Cherry orange</em> and Oranges <em>Apple</em>, <em>Banana</em>
答案 0 :(得分:4)
JavaScript不支持lookbehind。这是一种耻辱,正如我们本可以做到的那样:
// doesn't work in JavaScript:
/((apple|banana|cherry|orange)\b\s?)+(?<!\s)/gi
然而,我们可以做的是将白色空间移动到开头,并添加一个负向前瞻(因此捕获不能以空格开头):
/(?!\s)(\s?\b(apple|banana|cherry|orange)\b)+/gi
与您的代码略有不同的是,我还在模式的开头添加了\b
,因此它无法从apple
抓取Snapple
。
答案 1 :(得分:2)
您可以将函数放在replace参数中
function(x){return "<em>"+x.replace(/\s+$/,"")+"<em>";}
代替<em>$&</em>
你可以在该函数中添加条带空间。
"Apple Banana apple cherry, Cherry orange and Oranges Apple, Banana".replace(
/((?:apple|banana|cherry|orange)\b\s?)+/gi,
function(x){
return "<em>"+x.replace(/\s+$/,"")+"<em>";
})
<em>Apple Banana apple cherry<em>, <em>Cherry orange<em>and Oranges <em>Apple<em>, <em>Banana<em>
答案 2 :(得分:0)
您也可以通过模式末尾的前瞻来解决这个问题,以确保任何匹配后跟空格,逗号或字符串结尾(这自然意味着如果结果是匹配则匹配不匹配接下来是一封信,在有问题的例子中就是这种情况。)
改变匹配模式:
/((apple|banana|cherry|orange)\b\s?)+(?=\s|,|$)/gi