Why doesn't the javascript replace global flag work in Chrome or IE, and how to I work around it?

前端 未结 3 538
栀梦
栀梦 2021-01-01 16:57

According to the String.prototype.replace() page on MDN, I should be able to easily replace multiple patterns just by using

str.replace(\'what to replace\',          


        
相关标签:
3条回答
  • 2021-01-01 17:19

    It appears that webkit's implementation of string.replace perhaps doesn't have the 3rd parameter, as 'foo'.replace('o','i','g') results in fio for me.

    The following appears to work however:

    'foo'.replace(/o/gi,'i')
    

    Another option is:

    'foo'.replace(new RegExp('o', 'gi'),'i')
    
    0 讨论(0)
  • 2021-01-01 17:41

    The very page you linked to mentions:

    The use of the flags parameter in the String.replace method is non-standard. For cross-browser compatibility, use a RegExp object with corresponding flags.

    Basically, it should only work on Firefox. As per the documentation, you can generate regexes dynamically using new RegExp:

    var regex = new RegExp(variable, 'gi');
    questionText = questionText.replace(regex, rep);
    

    This will need variable to be escaped, however.

    0 讨论(0)
  • 2021-01-01 17:41

    From Mozilla Developer Network - JavaScript - String - replace

    Non-standard

    The use of the flags parameter in the String.replace method is non-standard. For cross-browser compatibility, use a RegExp object with corresponding flags.

    Working in Chrome and Firefox

    To get your code to work in Chrome and Firefox, you'll have to create a RegExp object (since your strings aren't hardcoded) with the appropriate flags. See Mozilla Developer Network - RegExp

    0 讨论(0)
提交回复
热议问题