How can I perform a str_replace in JavaScript, replacing text in JavaScript?

后端 未结 22 1795
没有蜡笔的小新
没有蜡笔的小新 2020-12-01 00:29

I want to use str_replace or its similar alternative to replace some text in JavaScript.

var text = \"this is some sample text that i want to re         


        
相关标签:
22条回答
  • 2020-12-01 00:59

    Method to replace substring in a sentence using React:

     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;
      };
    

    RunMethodHere

    0 讨论(0)
  • 2020-12-01 01:00

    There are already multiple answers using str.replace() (which is fair enough for this question) and regex but you can use combination of str.split() and join() together which is faster than str.replace() and regex.

    Below is working example:

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

    0 讨论(0)
  • 2020-12-01 01:01

    If you really want a equivalent to PHP's str_replace you can use Locutus. PHP's version of str_replace support more option then what the JavaScript String.prototype.replace supports. For example tags:

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

    or array's

    //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");
    

    Also this doesn't use regex instead it uses for loops. If you not want to use regex but want simple string replace you can use something like this ( based on 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)

    for more info see the source code https://github.com/kvz/locutus/blob/master/src/php/strings/str_replace.js

    0 讨论(0)
  • 2020-12-01 01:02

    Using regex for string replacement is significantly slower than using a string replace.
    As demonstrated on JSPerf, you can have different levels of efficiency for creating a regex, but all of them are significantly slower than a simple string replace. The regex is slower because:

    Fixed-string matches don't have backtracking, compilation steps, ranges, character classes, or a host of other features that slow down the regular expression engine. There are certainly ways to optimize regex matches, but I think it's unlikely to beat indexing into a string in the common case.

    For a simple test run on the JS perf page, I've documented some of the results:

    <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>

    The results for Chrome 68 are as follows:

    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
    

    From the sake of completeness of this answer (borrowing from the comments), it's worth mentioning that .replace only replaces the first instance of the matched character. Its only possible to replace all instances with //g. The performance trade off and code elegance could be argued to be worse if replacing multiple instances name.replace(' ', '_').replace(' ', '_').replace(' ', '_'); or worse while (name.includes(' ')) { name = name.replace(' ', '_') }

    0 讨论(0)
  • 2020-12-01 01:03

    You would use the replace method:

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

    The first argument is what you're looking for, obviously. It can also accept regular expressions.

    Just remember that it does not change the original string. It only returns the new value.

    0 讨论(0)
  • 2020-12-01 01:04

    In JavaScript, you call the replace method on the String object, e.g. "this is some sample text that i want to replace".replace("want", "dont want"), which will return the replaced string.

    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
    
    0 讨论(0)
提交回复
热议问题