如果它是最后一个字符,则查找开始0但不是最后一个

时间:2014-05-31 21:38:01

标签: javascript regex

我有一个字符串。我希望正则表达式替换所有前导0,如果它是字符串中的最后一个字符,则排除最后一个。

唯一的情况是真(最后一个字符为0)是整个字符串是0。

这是我的正则表达式:

/^0+/

我需要扩展以符合我提到的标准。目前,它会将"0000"替换为""

以下是一些预期的示例输入/输出:

"0000"   --> "0"
"0"      --> "0"
"0010"   --> "10"
"1"      --> "1"
"100050" --> "100050"
"09A"    --> "9A"

注意:我意识到我可以在替换字符串时放弃最后一个字符并且它应该可以工作,但我对它的正则表达式感兴趣。我也意识到我可以简单地使用if语句,因为我的当前正则表达式只在一种情况下失败。

4 个答案:

答案 0 :(得分:5)

使用parseInt(string, 10)应该做你需要的(第二个参数很重要,这样一些解释器不会将字符串视为八进制)。

如果您真的想使用正则表达式,可以使用替换保留最后一个字符。

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

答案 1 :(得分:3)

以下似乎有效(因为它与您的样本输入的预期输出相匹配):

.replace(/^0+(?!$)/g,'')

JS Fiddle demo

  • ^在字符串
  • 的开头断言位置
  • 0+字面上匹配字符0,量词:在一次和无限次之间,尽可能多次,根据需要回馈[贪心]
  • (?!$)否定前瞻 - 断言无法匹配下面的正则表达式
  • $断言字符串末尾的位置

答案 2 :(得分:2)

使用parseInt()

可以在没有RegEx的情况下完成
parseInt("[your string here]");

示例

var num1 = "0000"; 
var num2 = "0010";
var num3 = "1";
var num4 = "100050";

console.log(parseInt(num1)); //  --> "0"
console.log(parseInt(num2)); //  --> "10"
console.log(parseInt(num3)); //  --> "1"
console.log(parseInt(num4)); //  --> "100050"

这里是a working fiddle

答案 3 :(得分:1)

这个怎么样:

/(^0+(?=0$))|(^0+)/

Online Demo