从字符串中删除前导零和尾随零

我有几个像这样的字符串:

str1 = "00001011100000"; // 10111 str2 = "00011101000000"; // 11101 ... 

我想使用带有一次操作的正则表达式从每个字符串中去除前导和结束零。

到目前为止,我使用了两种不同的function,但我想将它们组合在一起:

 str.replace(/^0+/,'').replace(/0+$/,''); 

您可以使用OR子句( | )组合两个正则表达式:

 var r = '00001011100000'.replace(/^0+|0+$/g, ""); //=> "10111" 

更新:上面的正则表达式解决方案用空字符串替换0 。 要防止出现此问题,请使用此正则表达式:

 var repl = str.replace(/^0+(\d)|(\d)0+$/gm, '$1$2'); 

RegEx演示

RegEx分手:

  • ^ :断言开始
  • 0+ :匹配一个或多个零
  • (\d) :后跟在捕获组#1中捕获的数字
  • | : 要么
  • (\d) :匹配捕获组#2中捕获的数字
  • 0+ :后跟一个或多个零
  • $ :断言结束

替换:

这里我们使用两个捕获组的反向引用:

 $1$2 

这基本上在前导零和数字之后将数字置于替换之前的尾随零之前。

假设输入数据中始终至少有一位数,则可以使用此模式/^0*(\d+?)0*$/exec()并访问单个捕获组。

这只使用一个捕获组,没有替代(管道),并确保输出中至少有一个数字,并且不寻求多个匹配(没有g )。

捕获组使用惰性量词, 0使用贪婪量词来提高效率。 开始和结束锚点( ^$ )用于确保匹配整个字符串。

 console.log('0001001000 => '+ /^0*(\d+?)0*$/.exec("00100100")[1]); console.log('001 => ' + /^0*(\d+?)0*$/.exec("001")[1]); console.log('100 => ' + /^0*(\d+?)0*$/.exec("100")[1]); console.log('1 => ' + /^0*(\d+?)0*$/.exec("1")[1]); console.log('0 => ' + /^0*(\d+?)0*$/.exec("0")[1]); console.log('11 => ' + /^0*(\d+?)0*$/.exec("11")[1]); console.log('00 => ' + /^0*(\d+?)0*$/.exec("00")[1]); console.log('111 => ' + /^0*(\d+?)0*$/.exec("111")[1]); console.log('000 => ' + /^0*(\d+?)0*$/.exec("000")[1]);