Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.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 如果在单词中找到相同的字符串,则停止.replace()替换_Javascript_Jquery_Regex_Replace - Fatal编程技术网

Javascript 如果在单词中找到相同的字符串,则停止.replace()替换

Javascript 如果在单词中找到相同的字符串,则停止.replace()替换,javascript,jquery,regex,replace,Javascript,Jquery,Regex,Replace,例如:有一个页面列出了一些带有颜色的项目。有些列为海军,有些列为海军 $('.ProductDetails a').each(function() { var text = $(this).text(); $(this).text(text.replace("Nav", "Navy")); }); 将导致所有的“导航”被改为海军-太棒了 但这也将导致“海军”改为Navyy。i、 e.将海军中的“nav”替换为海军,并在“nav”被替换后保留“y” 有没有一种方法可以使用上面的

例如:有一个页面列出了一些带有颜色的项目。有些列为海军,有些列为海军

$('.ProductDetails a').each(function() {
    var text = $(this).text();
    $(this).text(text.replace("Nav", "Navy")); 
});
将导致所有的“导航”被改为海军-太棒了

但这也将导致“海军”改为Navyy。i、 e.将海军中的“nav”替换为海军,并在“nav”被替换后保留“y”

有没有一种方法可以使用上面的技术来阻止这种情况发生,或者我必须更改脚本来解释这些重复出现的情况

我目前的解决方案是在Nav$this.texttext.replaceNav之后添加一个空格,Navy

但这并不理想,因为有些项目后面可能有一个/并且没有空间

$('.ProductDetails a').each(function() {
    var text = $(this).text();
    $(this).text(text.replace(/^Nav$/g, "Navy")); 
});
或:

或:

还有很多其他的方法

请注意,您可以使用此文本重载:


您可以像这样使用正则表达式替换:

$(this).text(text.replace(/\snav[\s/]/g,"navy");
指:

replace [whitespace]nav[whitespace or "/"] to "navy"

您希望使用了解单词边界的正则表达式:

text.replace(/\bnav\b/, 'Navy')

或者,使用接受函数引用的重载:$this.textfunctionold{return old.replace/^Nav$/g,Navy;};这不会取代像Nav这样的东西。“在这种情况下可能不重要,但要知道这一点很好。”安德烈·希特克+1.谢谢你的注释,但它可能会更好,请参阅更新。@gdoron:啊,很好,我完全忘了我们在一个。each:Otext重载有索引,旧为参数;如果实际的文本样本数不超过1个,那么确定解决方案就有点困难。输入语言术语很好,但没有示例也没用。正如您所说,Nav只是一个示例。它是可以包含在另一个单词中的任何字符串。用猫代替狗也会导致dogma这个词被替换成catma。用花生代替颜色会导致色盲成为花生盲etcSo regex知道语言。你认为正则表达式知道单词是什么吗?林肯导航器会取代什么?您将如何替换缩写或缩略语。这个清单是无穷无尽的。一个词在哪里开始、结束等
$(this).text(text.replace(/\snav[\s/]/g,"navy");
replace [whitespace]nav[whitespace or "/"] to "navy"
text.replace(/\bnav\b/, 'Navy')