How to replace all matching characters except the first occurrence

后端 未结 1 1393
心在旅途
心在旅途 2020-12-11 07:14

I am trying to use regex to compare a string in JavaScript. I want to replace all \'.\'s and \'%\'s with empty character \'\' but the catch is I do

相关标签:
1条回答
  • 2020-12-11 07:35

    You can pass in a function to replace, and skip the first match like this:

    var i = 0;
    value.replace(/[\.\%]/g, function(match) { 
        return match === "." ? (i++ === 0 ? '.' : '') : ''; 
    });
    

    Here is a self-contained version with no external variables:

    value.replace(/[\.\%]/g, function(match, offset, all) { 
       return match === "." ? (all.indexOf(".") === offset ? '.' : '') : ''; 
    }) 
    

    This second version uses the offset passed into the replace() function to compare against the index of the first . found in the original string (all). If they are the same, the regex leaves it as a .. Subsequent matches will have a higher offset than the first . matched, and will be replaced with a ''. % will always be replaced with a ''.


    Both versions result in:

    4.5667.444... ==> 4.56667444
    %4.5667.444... ==> 4.5667444

    Demo of both versions: http://jsbin.com/xuzoyud/5/

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