如何在JavaScript中执行str_replace,替换JavaScript中的文本?

时间:2011-04-01 22:06:41

标签: javascript replace str-replace

我想使用str_replace或类似的替代方法来替换JavaScript中的一些文本。

var text = "this is some sample text that i want to replace";
var new_text = replace_in_javascript("want", "dont want", text);
document.write("new_text");

应该给出

this is some sample text that i dont want to replace
  

如果您要使用正则表达式,那么性能影响是什么?   与内置替代方法的比较。

24 个答案:

答案 0 :(得分:194)

您可以使用replace方法:

text = text.replace('old', 'new');

显然,第一个论点是你正在寻找的东西。它也可以接受正则表达式。

请记住它更改原始字符串。它只返回新值。

答案 1 :(得分:82)

更简单:

city_name=city_name.replace(/ /gi,'_');

用'_'替换所有空格!

答案 2 :(得分:17)

所有这些方法都不会修改原始值,返回新的字符串。

var city_name = 'Some text with spaces';

用_

替换第一个空格
city_name.replace(' ', '_'); // Returns: Some_text with spaces

使用正则表达式将所有空格替换为_。如果您需要使用正则表达式,那么我建议您使用https://regex101.com/

进行测试
city_name.replace(/ /gi,'_');  // Returns: Some_text_with_spaces 

所有空格替换为_ 而不使用正则表达式。功能方式。

city_name.split(' ').join('_');  // Returns: Some_text_with_spaces

答案 3 :(得分:16)

你应该这样写:

var text = "this is some sample text that i want to replace";
var new_text = text.replace("want", "dont want");
document.write(new_text);

答案 4 :(得分:14)

  

该功能会替换仅发生一次 ..如果您需要替换   多次出现你应该尝试这个功能:   http://phpjs.org/functions/str_replace:527

不一定。 看到Hans Kesting的回答:

city_name = city_name.replace(/ /gi,'_');

答案 5 :(得分:14)

其他人给你的代码只替换一次,而使用正则表达式替换它们(如@sorgit所说)。要用“不想要”替换所有“想要”,我们这个代码:

var text = "this is some sample text that i want to replace";
var new_text = text.replace(/want/g, "dont want");
document.write(new_text);

变量“new_text”将导致“这是我不想替换的一些示例文本”。

要获得正则表达式的快速指南,请转到此处:
http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/
要了解有关str.replace()的更多信息,请转到此处:
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/replace
祝你好运!

答案 6 :(得分:9)

使用正则表达式进行字符串替换比使用字符串替换要慢得多。
on JSPerf所示,创建正则表达式可以具有不同的效率水平,但是它们都比简单的字符串替换要慢得多。 The regex is slower because

  

固定字符串匹配没有回溯,编译步骤,范围,字符类或其他许多使正则表达式引擎变慢的功能。当然,有很多方法可以优化正则表达式匹配项,但在一般情况下,我认为将索引编入字符串是不太可能的。

为了在JS perf页面上运行一个简单的测试,我记录了一些结果:

<script>
// Setup
  var startString = "xxxxxxxxxabcxxxxxxabcxx";
  var endStringRegEx = undefined;
  var endStringString = undefined;
  var endStringRegExNewStr = undefined;
  var endStringRegExNew = undefined;
  var endStringStoredRegEx = undefined;      
  var re = new RegExp("abc", "g");
</script>

<script>
// Tests
  endStringRegEx = startString.replace(/abc/g, "def") // Regex
  endStringString = startString.replace("abc", "def", "g") // String
  endStringRegExNewStr = startString.replace(new RegExp("abc", "g"), "def"); // New Regex String
  endStringRegExNew = startString.replace(new RegExp(/abc/g), "def"); // New Regexp
  endStringStoredRegEx = startString.replace(re, "def") // saved regex
</script>

Chrome 68的结果如下:

String replace:    9,936,093 operations/sec
Saved regex:       5,725,506 operations/sec
Regex:             5,529,504 operations/sec
New Regex String:  3,571,180 operations/sec
New Regex:         3,224,919 operations/sec

出于这个答案的完整性(从注释中借用),值得一提的是.replace仅替换匹配字符的第一个实例。只能用//g替换所有实例。如果替换多个实例name.replace(' ', '_').replace(' ', '_').replace(' ', '_');或更糟糕的while (name.includes(' ')) { name = name.replace(' ', '_') }

,则性能折衷和代码优雅可能被认为更糟。

答案 7 :(得分:8)

hm ..你检查了replace()吗?

您的代码将如下所示

var text = "this is some sample text that i want to replace";
var new_text = text.replace("want", "dont want");
document.write(new_text);

答案 8 :(得分:7)

在JavaScript中,您可以在String对象上调用replace方法,例如"this is some sample text that i want to replace".replace("want", "dont want"),它将返回被替换的字符串。

var text = "this is some sample text that i want to replace";
var new_text = text.replace("want", "dont want"); // new_text now stores the replaced string, leaving the original untouched

答案 9 :(得分:7)

JavaScript具有String对象的replace()方法来替换子字符串。此方法可以有两个参数。第一个参数可以是字符串或正则表达式模式(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

您可以使用函数作为第二个参数来更好地控制替换文本。

答案 10 :(得分:7)

var new_text = text.replace("want", "dont want");

答案 11 :(得分:3)

如果您确实想要等同于PHP的str_replace,则可以使用Locutus。 PHP的str_replace版本比JavaScript String.prototype.replace支持的版本更多。 例如标签:

//PHP
$bodytag = str_replace("%body%", "black", "<body text='%body%'>");
//JS with Locutus
var $bodytag = str_replace(['{body}', 'black', '<body text='{body}'>')  

或数组的

//PHP
$vowels = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U");
$onlyconsonants = str_replace($vowels, "", "Hello World of PHP");
//JS with Locutus
var $vowels = ["a", "e", "i", "o", "u", "A", "E", "I", "O", "U"];
var $onlyconsonants = str_replace($vowels, "", "Hello World of PHP");

此外,它不使用正则表达式,而是用于循环。如果您不想使用正则表达式,但是想要简单的字符串替换,则可以使用类似这样的东西(基于Locutus)

function str_replace (search, replace, subject) {

  var i = 0
  var j = 0
  var temp = ''
  var repl = ''
  var sl = 0
  var fl = 0
  var f = [].concat(search)
  var r = [].concat(replace)
  var s = subject
  s = [].concat(s)

  for (i = 0, sl = s.length; i < sl; i++) {
    if (s[i] === '') {
      continue
    }
    for (j = 0, fl = f.length; j < fl; j++) {
      temp = s[i] + ''
      repl = r[0]
      s[i] = (temp).split(f[j]).join(repl)
      if (typeof countObj !== 'undefined') {
        countObj.value += ((temp.split(f[j])).length - 1)
      }
    }
  }
  return s[0]
}
var text = "this is some sample text that i want to replace";

var new_text = str_replace ("want", "dont want", text)
document.write(new_text)

有关更多信息,请参见源代码https://github.com/kvz/locutus/blob/master/src/php/strings/str_replace.js

答案 12 :(得分:3)

您可以使用

text.replace('old', 'new')

并一次更改一个字符串中的多个值,例如将#更改为字符串v,将_更改为字符串w:

text.replace(/#|_/g,function(match) {return (match=="#")? v: w;});

答案 13 :(得分:3)

使用str.replace()(对于这个问题足够公平)和regex已经有多个答案,但是您可以将str.split()join()结合使用,这样更快比str.replace()regex

下面是工作示例:

var text = "this is some sample text that i want to replace";

console.log(text.split("want").join("dont want"));

答案 14 :(得分:2)

在Javascript中,replace函数可用于用新字符串替换给定字符串中的子字符串。 使用:

var text = "this is some sample text that i want to replace";
var new_text = text.replace("want", "dont want");
console.log(new_text);

您甚至可以通过此函数使用正则表达式。例如,如果要用,替换所有出现的.

var text = "123,123,123";
var new_text = text.replace(/,/g, ".");
console.log(new_text);

此处g修饰符用于全局匹配所有可用的匹配项。

答案 15 :(得分:2)

使用React的replace substring in a sentence方法:

 const replace_in_javascript = (oldSubStr, newSubStr, sentence) => {
    let newStr = "";
    let i = 0;
    sentence.split(" ").forEach(obj => {
      if (obj.toUpperCase() === oldSubStr.toUpperCase()) {
        newStr = i === 0 ? newSubStr : newStr + " " + newSubStr;
        i = i + 1;
      } else {
        newStr = i === 0 ? obj : newStr + " " + obj;
        i = i + 1;
      }
    });
    return newStr;
  };

ios 8 Swift - TableView with embedded CollectionView

答案 16 :(得分:2)

如果您不想使用正则表达式,则可以使用此函数来替换字符串中的所有字符

源代码:

function ReplaceAll(mystring, search_word, replace_with) 
{
    while (mystring.includes(search_word))
    {
        mystring = mystring.replace(search_word, replace_with);
    }

    return mystring;  
}

使用方法:

var mystring = ReplaceAll("Test Test", "Test", "Hello"); 

答案 17 :(得分:2)

您有以下选择:

  1. 替换第一次出现的

var text = "this is some sample text that i want to replace and this i WANT to replace as well.";
var new_text = text.replace('want', 'dont want');
// new_text is "this is some sample text that i dont want to replace and this i WANT to replace as well"
console.log(new_text)

  1. 替换所有事件-区分大小写

var text = "this is some sample text that i want to replace and this i WANT to replace as well.";
var new_text = text.replace(/want/g, 'dont want');
// new_text is "this is some sample text that i dont want to replace and this i WANT to replace as well
console.log(new_text)

  1. 替换所有出现的内容-不区分大小写

var text = "this is some sample text that i want to replace and this i WANT to replace as well.";
var new_text = text.replace(/want/gi, 'dont want');
// new_text is "this is some sample text that i dont want to replace and this i dont want to replace as well
console.log(new_text)

更多信息-> here

答案 18 :(得分:2)

使用JS String.prototype.replace的第一个参数应为Regex模式或String,第二个参数应为String或函数。

str.replace(regexp|substr, newSubStr|function);

例如:

var str = 'this is some sample text that i want to replace'; var newstr = str.replace(/want/i, "dont't want"); document.write(newstr); // this is some sample text that i don't want to replace

答案 19 :(得分:1)

ES2021 / ES12

String.prototype.replaceAll()

即使输入模式是字符串,也试图提供完整的替换选项。

const str = "Backbencher sits at the Back";
const newStr = str.replaceAll("Back", "Front");
console.log(newStr); // "Frontbencher sits at the Front"

String.prototype.replace()

仅当我们将模式作为正则表达式提供时,我们才能进行完整的 ** 替换**。
const str = "Backbencher sits at the Back";
const newStr = str.replace(/Back/g, "Front");
console.log(newStr); // "Frontbencher sits at the Front"

如果输入模式是字符串,replace() 方法只替换第一次出现。

const str = "Backbencher sits at the Back";
const newStr = str.replace("Back", "Front");
console.log(newStr); // "Frontbencher sits at the Back"

答案 20 :(得分:0)

function str_replace($old, $new, $text)
{
   return ($text+"").split($old).join($new); 
}

您不需要其他库。

答案 21 :(得分:0)

在ECMAScript 2021中,可以使用replaceAll

const str = "string1 string1 string1"
const newStr = str.replaceAll("string1", "string2");

console.log(newStr)
//  "string2 string2 string2"

答案 22 :(得分:0)

最简单的形式如下

如果你只需要替换第一次出现

var newString = oldStr.replace('want', 'dont want');

如果你不想全部发生

var newString = oldStr.replace(want/g, 'dont want');

答案 23 :(得分:-1)

添加了一种方法replace_in_javascript,它将满足您的要求。还发现您正在"new_text"中写一个字符串document.write(),该字符串应该引用变量new_text

let replace_in_javascript= (replaceble, replaceTo, text) => {
  return text.replace(replaceble, replaceTo)
}

var text = "this is some sample text that i want to replace";
var new_text = replace_in_javascript("want", "dont want", text);
document.write(new_text);