Javascript 查找开始0,但不是最后一个0(如果是';最后一个字符是什么

Javascript 查找开始0,但不是最后一个0(如果是';最后一个字符是什么,javascript,regex,Javascript,Regex,我有一根绳子。我希望正则表达式替换所有前导0,如果它是字符串中的最后一个字符,则不包括最后一个0 唯一正确的情况(最后一个字符为0)是整个字符串为0 这是我的正则表达式: /^0+/ 我需要扩展它以符合我提到的标准。目前,它将用“ 以下是一些预期的示例输入/输出: “0000”->“0” "0" --> "0" "0010" --> "10" "1" --> "1" "100050" --> "100050" “09A”->“9A” 注意:我意识到我可以在替换字符串时

我有一根绳子。我希望正则表达式替换所有前导0,如果它是字符串中的最后一个字符,则不包括最后一个0

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

这是我的正则表达式:

/^0+/
我需要扩展它以符合我提到的标准。目前,它将用

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

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

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

这可以通过使用

示例

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"
这是一个游戏。

这个怎么样:

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

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

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

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

以下内容似乎有效(因为它与示例输入的预期输出相匹配):

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

对于我给出的示例,这是正确的,但我忘了包括十六进制值。哎呀,检查我的编辑。这似乎也匹配非前导零,例如在
10000
中,它将匹配除最后一个之外的所有零。但是,它们不是前导零,因此没有任何匹配项。您是对的,我在第一个0旁边漏掉了一个“^”,如^0+1,因为您的解决方案适用于我以前的示例,但这不适用于输入
“0”
。我期望
“0”-->“0”
。不是很完美,但很好。效果完全符合预期,这就是我一直在寻找的答案。非常感谢。我看到您添加的所有内容都是
(?!$)
。是的,好的ol“消极前瞻:)(尽管请注意,这稍微不那么冗长/不可理解…+1是一个完美的解决方案,但我已经接受了与我的问题更接近的答案(我正在寻找排除正则表达式,而不是替换最后一个字符)。但还是要谢谢你。
str.replace(/^0+(.)/, "$1");
.replace(/^0+(?!$)/g,'')