正则表达式:如果它是一个单词或在 URL 内,则替换 foo

Jon*_*n K 4 javascript regex

鉴于这种:

str = "foo myfoo http://thefoobar.com/food is awesome";
str.replace(magicalRegex, 'bar');
Run Code Online (Sandbox Code Playgroud)

预期的结果是:

"bar myfoo http://thebarbar.com/bard is awesome"
Run Code Online (Sandbox Code Playgroud)

我得到了\b(foo)\b部分,但我无法弄清楚如何foo从 url 中匹配和捕获。出于这些目的,假设 url 始终以http.

有什么帮助吗?

anu*_*ava 5

您可以使用此代码(适用于您的示例,但尚未尝试使用更复杂的输入):

str = 'foo myfoo http://thefoobar.com/food is awesome';
str = str.replace(/\bfoo\b/g, 'bar');
while (/http:\/\/[^\s]*?foo/.test(str))
    str = str.replace(/(http:\/\/[^\s]*?)?foo/g, function($0, $1) {
        return $1 ? $1 + 'bar' : $0;
    });
console.log(str);
Run Code Online (Sandbox Code Playgroud)

输出:

bar myfoo http://thebarbar.com/bard is awesome
Run Code Online (Sandbox Code Playgroud)

现场演示:http : //ideone.com/8xGy2h