简体   繁体   English

替换字符串中单词的最后一次出现

[英]Replace last occurrence of a word within a string

I am trying to replace last occurrence of a word within string. 我正在尝试替换字符串中单词的最后一次出现。

This doesn't work: 这不起作用:

var str = '@[Kenneth Auchenberg](contact:1) @[kenneth@auchenberg.dk](contact:7) Kenneth Auchenber';
v = str.replace(/Kenneth Auchenberg(?![sS]*Kenneth Auchenberg?)/ , '@[Kenneth Auchenberg](contact:1)');
alert(v);

This works fine, though: 不过,这可以正常工作:

var str = '-44-test alue-1564test alue';
str = str.replace(/test alue(?![\s\S]*test alue)/, 'aa');
alert(str);

JSFiddle 的jsfiddle

Why doesn't the first version work, and how can I fix it? 为什么第一个版本不起作用,如何解决?

I have modified your input string and regexp code. 我已经修改了您的输入字符串和正则表达式代码。 First, modified [\\s\\S]*Kenneth Auchenberg and g was missing Kenneth Auchenberg'; 首先,修改的[\\s\\S]*Kenneth Auchenbergg缺少Kenneth Auchenberg';

var str = '@[Kenneth Auchenberg](contact:1) @[kenneth@auchenberg.dk](contact:7) Kenneth Auchenberg';
v = str.replace(/Kenneth Auchenberg(?![\s\S]*Kenneth Auchenberg?)/ , '@[Kenneth Auchenberg](contact:1)');
alert(v);

var str = '-44-test alue-1564test alue';
str = str.replace(/test alue(?![\s\S]*test alue)/, 'aa');
alert(str);

Search: Kenneth Auchenberg?(?!g?\\]|\\(contact) 搜索: Kenneth Auchenberg?(?!g?\\]|\\(contact)

Replace: @[Kenneth Auchenberg](contact:1) 替换: @[Kenneth Auchenberg](contact:1)

See demo . 参见演示

If you're sure the name you wanna match is at the end of the string, you can use: 如果您确定要匹配的名称位于字符串的末尾,则可以使用:

/(Kenneth Auchenberg)\s*$/

Note: there's a typo in your code. 注意:您的代码中有错别字。 The last Kenneth Auchenberg is written as Kenneth Auchenber (with a missing 'g' at the end). 最后一个Kenneth Auchenberg Kenneth AuchenberKenneth Auchenberg被写为Kenneth AuchenberKenneth AuchenberKenneth Auchenber带有“ g”)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM