JavaScript具有replace()
String对象的方法来替换子字符串。此方法可以有两个参数。第一个参数可以是字符串或正则表达式模式(regExp对象),第二个参数可以是字符串或函数。replace()
具有两个字符串参数的方法的示例如下所示。
var text = 'one, two, three, one, five, one';
var new_text = text.replace('one', 'ten');
console.log(new_text) //ten, two, three, one, five, one
请注意,如果第一个参数是字符串,则如上例所示,仅替换第一次出现的子字符串。要替换所有出现的子字符串,您需要提供带有g
(全局)标志的正则表达式。如果不提供全局标志,则即使您将正则表达式作为第一个参数,也只会替换子字符串的第一个匹配项。因此,让我们替换one
上面示例中所有出现的情况。
var text = 'one, two, three, one, five, one';
var new_text = text.replace(/one/g, 'ten');
console.log(new_text) //ten, two, three, ten, five, ten
请注意,不要将正则表达式模式用引号引起来,这会使它成为字符串而不是regExp对象。要进行不区分大小写的替换,您需要提供其他标志i
,以使模式不区分大小写。在这种情况下,上述正则表达式将为/one/gi
。注意i
这里添加的标志。
如果第二个参数具有一个函数,并且存在匹配项,则该函数将与三个参数一起传递。函数获取的参数是匹配项,匹配项的位置和原始文本。您需要返回该匹配项应替换为的内容。例如,
var text = 'one, two, three, one, five, one';
var new_text = text.replace(/one/g, function(match, pos, text){
return 'ten';
});
console.log(new_text) //ten, two, three, ten, five, ten
您可以使用函数作为第二个参数来对替换文本进行更多控制。
str_replace
也接受两个相同长度的数组,其中第一个数组中的每个字符串都替换为第二个数组中相同索引的字符串。请参阅stackoverflow.com/a/5069776/296430,了解到目前为止我发现的唯一正确的函数,该函数可以模仿javascript中的确切行为。