[英]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.