是否有正则表达式来替换除第一个以外的所有事件?

Is there a regex to replace all occurences except for the first one?

我已经尝试将其用于上述目的

var str = "48abc5,2d25.,ft87";
str = str.replace(/[^\d(,.)?]/g, '');
console.log(str);

我预计输出会是 485,225 因为通过问号的 0-1 条件。

但是我的输出是 485,225.,87

简单地说,我的最终方法是用逗号或点分隔数字。 以下模式符合我的意图:

{1-9}+{0-9)?{, | . }{1-9}*

很想听听您的解决方案。

在字符 类 内,所有字符都是文字,除了 ^\[-。因此,您不能在那里添加 ? 并期望它表现为量词。

你需要

var str = "48abc5,2d25.,ft87";
str = str.replace(/[^\d,.]+/g, '').replace(/^([^.,]*(?:[.,][^.,]*)?).*/, '').replace(/^0+/, "");
console.log(str);

.replace(/[^\d,.]+/g, '') 部分删除除数字、点和逗号之外的所有字符。

.replace(/^([^.,]*(?:[.,][^.,]*)?).*/, '') 部分保留第一串数字,并可选择在第一个 .,.

之后保留第二串数字

.replace(/^0+/, "") 部分删除字符串开头的一个或多个 0 数字。

你的固定演示 fiddle:

function testRegex(event){
    let evt = event || window.event
  console.log(evt.target.value)
  document.getElementById("result").innerHTML = "Result: "+ 
  evt.target.value.replace(/[^\d,.]+/g, '')
                            .replace(/^([^.,]*(?:[.,][^.,]*)?).*/, '')
                              .replace(/^0+/, "");
}
<label>Value:</label>
<input onkeyup="testRegex()" type="text"/>
<p id="result">Result:</p>