簡體   English   中英

從字符串中刪除前導零和尾隨零

[英]Remove leading and trailing zeros from a string

我有幾個這樣的字符串:

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

我想使用帶有 ONE 操作的正則表達式從每個字符串中去除前導和結束零。

到目前為止,我使用了兩個不同的函數,但我想將它們組合在一起:

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');

正則表達式演示

正則表達式分解:

  • ^ : 斷言開始
  • 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]);

或者,您可以將一半的工作轉移到+以將字符串轉換為 int(這具有在沒有長度時穩定輸入的額外好處),然后讓replace處理右側修剪。

一次性回溯 ( (?<=\\d) ) 用於確保最小輸出長度為 1。 我可以使用:在 JS 正則表達式中回溯

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM