Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.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_Replace - Fatal编程技术网

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

如何用标签包装一组单词,JavaScript替换正则表达式,javascript,regex,replace,Javascript,Regex,Replace,我试图用HTML标签包装一些单词,因为我使用的是正则表达式。我快到了: 这是我的regexp /((apple|banana|cherry|orange)\b\s?)+/gi 这是我的替代者: <em>$&</em> 结果是: <em>Apple Banana apple cherry</em>, <em>Cherry orange </em>and Oranges <em>Apple</em&

我试图用HTML标签包装一些单词,因为我使用的是正则表达式。我快到了:

这是我的regexp

/((apple|banana|cherry|orange)\b\s?)+/gi
这是我的替代者:

<em>$&</em>
结果是:

<em>Apple Banana apple cherry</em>, <em>Cherry orange </em>and Oranges <em>Apple</em>, <em>Banana</em>
苹果香蕉苹果樱桃,樱桃橙和橙子苹果,香蕉
我可以实事求是地接受这一点,但我真的希望它完美无瑕,不包括决赛后的空间

i、 e.我的完美结果是(见标签在“樱桃橙”后左移):

苹果香蕉苹果樱桃,樱桃橙和橙子苹果,香蕉

您可以将函数作为

函数(x){return”“+x.replace(/\s+$/,“”)+;}
而不是
$&

您可以在该函数中添加条带空间

"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>
“苹果香蕉苹果樱桃,樱桃橙和橘子苹果香蕉”。更换(
/(((?:苹果|香蕉|樱桃|橙)\b\s?+/gi,
功能(x){
返回“+x.replace(/\s++/,”)+”;
})
苹果香蕉苹果樱桃樱桃樱桃橙子苹果香蕉

JavaScript不支持查找。这是一种耻辱,我们本可以做到:

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

与您的代码稍有不同的是,我还在模式的开头添加了
\b
,因此它不会从
Snapple

捕获
apple
,您还可以通过在模式的末尾进行前瞻来解决这个问题,以确保任何匹配后面都有空格、逗号或字符串结尾(这自然意味着如果结果后面有一个字母,则匹配将不匹配,在有问题的示例中就是这样)

更改匹配模式:

/((apple|banana|cherry|orange)\b\s?)+(?=\s|,|$)/gi

“橙子”不应该用s括起来吗?为什么不用$&(注意斜线)?@BipedalShark:没错,我只想要完整和具体的单词。@nalply:我的错,当然,我刚刚纠正了它JavaScript在lookback方面没有问题,它不支持它。也许这就是你的意思,但“有问题”表明(对我来说)它确实支持它,但实现中包含bug。我知道,这就是我的意思。这是一个大问题。我同意,巴特,我将更改它以避免混淆。在我的原始示例中,
\b
似乎没有必要。非常感谢!!这是我关于StackOverflow的第一个问题。我非常惊讶我得到了一个完美的答案很快!没问题,谢谢!欢迎来到StackOverflow。顺便说一句,这是一个非常好的问题,而且格式很好。可能是因为它的投票率如此之高。你能详细说明为什么替换的第二个参数是一个函数吗?我找不到任何关于此行为的文档。-但是注意,并非所有浏览器都支持它(例如,IE5)
// doesn't work in JavaScript:
/((apple|banana|cherry|orange)\b\s?)+(?<!\s)/gi 
/(?!\s)(\s?\b(apple|banana|cherry|orange)\b)+/gi
/((apple|banana|cherry|orange)\b\s?)+(?=\s|,|$)/gi