使用javascript替换匹配的单词

时间:2014-05-13 04:44:30

标签: javascript

我需要一个正则表达式来替换整个单词。

我能够到达这里。

示例

var test = "abc.com abc.com/help abc.com";
var content = "abc.com";
var replaceContent = "xyz";
var replaceRegexp = new RegExp("\\b" +content+ "\\b","g");
test.replace(replaceRegexp,replaceContent);

越野xyz xyz/help xyz

但我想要输出xyz abc.com/help xyz

4 个答案:

答案 0 :(得分:1)

您不需要那个

的正则表达式
"abc.com abc.com/help abc.com".split(' ').reduce(function (str, word, i) {
     return str + (i ? ' ' : '') + (word == 'abc.com' ? 'xyz' : word);
}, '');

请记住,如果使用RegExp,则必须转义\.之类的特殊字符。

答案 1 :(得分:0)

菜鸟和直接方法

var result = test.replace(/abc.com/g,"xyz").replace("xyz/help","abc.com/help");

答案 2 :(得分:0)

似乎你想要替换" abc.com"只有在空格,字符串的开头和结尾包围时才会出现:

var s = "abc.com abc.com/help abc.com";
s.replace(/(^| )abc\.com( |$)/g, '$1g$2'); // g abc.com/help g  

您可以创建一个函数来执行上述操作:

function replaceWholeWord(s, p, w) {
  p = p.replace(/([\\\/\.])/g,'\\$1');
  var re = new RegExp('(^| )' + p + '( |$)','g');
  return s.replace(re, '$1' + w + '$2');
}

console.log(replaceWholeWord(' abc.com abc.com/help abc.com',' abc.com /',' g') );

但是你必须引用某些字符,因此它们被视为普通字符,而不是正则表达式搜索术语(例如abc.com变为abc \ .com,foo / bar变为foo \ / bar等)。我只引用了\,/和句点(。)。

答案 3 :(得分:0)

如果问题是/,那么您可以尝试:

var test = "abc.com abc.com/help abc.com abc.com?test abc.com";
var content = "abc\\.com";
var replaceContent = "xyz";
var replaceRegexp = new RegExp("\\b" + content + "(?!/)\\b","g");
test = test.replace(replaceRegexp,replaceContent);

console.log(test); // xyz abc.com/help xyz xyz?test xyz

如果问题是您希望content没有后跟另一个字符串,那么您可以尝试:

var test = "abc.com something/abc.com abc.com/help abc.com abc.com?test abc.com";
var content = "abc\\.com";
var replaceContent = "xyz";
var replaceRegexp = new RegExp("\\b" + content + "(?=\\s|$)","g");
test = test.replace(replaceRegexp,replaceContent);

console.log(test); // xyz something/xyz abc.com/help xyz abc.com?test xyz

如果问题是您希望content不属于另一个字符串,那么您可以尝试:

var test = "abc.com something/abc.com abc.com/help abc.com abc.com?test abc.com";
var content = "abc\\.com";
var replaceContent = "xyz";
var replaceRegexp = new RegExp("(\\s|^)" + content + "(?=\\s|$)","g");
test = test.replace(replaceRegexp, '$1' + replaceContent);

console.log(test); // xyz something/abc.com abc.com/help xyz abc.com?test xyz

更新:最后,正如RobG所述,.中的content必须转义

如果只有.,那么一个简单的content.replace('.', '\\.')将完成工作..或content.replace(/\./g, '\\$&')如果有多个

要获得更全面的方法,请尝试以下方法:

var test = "abc.com abcdcom something/abc.com abc.com/help abc.com abc.com?test abc.com";
var content = "abc.com";
var replaceContent = "xyz";
var rQuantifiers = /[-\/\\^$*+?.()|[\]{}]/g;
var replaceRegexp = new RegExp("(\\s|^)" + content.replace(rQuantifiers, '\\$&') + "(?=\\s|$)","g");
test = test.replace(replaceRegexp, '$1' + replaceContent);

console.log(test); // xyz abcdcom something/abc.com abc.com/help xyz abc.com?test xyz