JavaScript .replace仅替换第一个匹配项

185
var textTitle = "this is a test"
var result = textTitle.replace(' ', '%20');
但是替换函数会在第一个实例处停止,即在“ ”处停止,并且我得到以下结果:"this%20is a test"。您有什么想法,我到底做错了什么,我相信这是一个简单的修复问题。

5
在这种情况下,replace() 是 JavaScript 字符串方法,没有涉及 jQuery。 - ajm
10
感谢您不使用jQuery。 - user376314
7个回答

296

你需要在那里加上/g,像这样:

var textTitle = "this is a test";
var result = textTitle.replace(/ /g, '%20');

console.log(result);

您可以在此进行调试,默认的.replace()行为是仅替换第一个匹配项,/g修饰符(全局)将其告诉它替换所有出现次数。


更换管道,请参见此处 - craned

11
textTitle.replace(/ /g, '%20');

8
如果您需要从字符串中获取通用正则表达式,请使用以下操作:

const textTitle = "this is a test";
const regEx = new RegExp(' ', "g");
const result = textTitle.replace(regEx , '%20');
console.log(result); // "this%20is%20a%20test" will be a result
    


5

引用自w3schools

replace()方法在字符串中搜索一个子串(或正则表达式),并用新的子串替换匹配的子串。

这里最好使用正则表达式:

textTitle.replace(/ /g, '%20');

谢谢提供参考,这个例子不太容易跟随,因为空格是替换值(例如 / /g)。 - TheEmirOfGroofunkistan

4

尝试使用正则表达式替换字符串作为第一个参数。

"this is a test".replace(/ /g,'%20') // #=> "this%20is%20a%20test"


3
为此,您需要使用正则表达式的g标志... 像这样:
var new_string=old_string.replace( / (regex) /g,  replacement_text);

That sh


-5

2
他不是要求一个JQuery版本吗?我在JQuery API中没有看到.replace() - 那是原生的Javascript。 - amfeng
2
@Nick 你是嫉妒了吗? :) - Nikita Rybak
4
@Nikita - 不...这与问题完全无关。楼主错误地将jQuery包含在其中,这是原生JavaScript,与jQuery或其替换方法毫无关系 - Nick Craver
1
@Nick:好吧,我想也是;我只是试图给他他所要求的。 - amfeng
2
@afeng - 我明白,但请尝试阅读整个问题,而不仅仅是标题...这个问题是关于.replace()字符串操作符的,没有涉及到jQuery,这是一个常见的混淆,不幸的是。 - Nick Craver
这是唯一帮助了我的答案。我对JavaScript不太擅长,所以我无法理解为什么' '会变成/ /g。 可能/只是一个转义的空格字符,但是我该如何将其适应于textTitle.replace('abc', 'def');? - Craig

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接