【问题标题】:Is there a regex to replace all occurences except for the first one?是否有一个正则表达式来替换除第一个之外的所有事件?
【发布时间】:2022-01-02 20:22:42
【问题描述】:

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

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}*

很想听听您的解决方案。

【问题讨论】:

    标签: javascript reactjs regex regexp-replace


    【解决方案1】:

    在字符类中,所有字符都是文字,^\[- 除外。因此,您不能在其中添加 ? 并期望它充当量词。

    你需要

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

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

    .replace(/^([^.,]*(?:[.,][^.,]*)?).*/, '$1') 部分保留第一个数字串,并且可以选择在第一个 ., 之后保留第二个数字串。

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

    你的固定演示小提琴:

    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(/^([^.,]*(?:[.,][^.,]*)?).*/, '$1')
                                  .replace(/^0+/, "");
    }
    <label>Value:</label>
    <input onkeyup="testRegex()" type="text"/>
    <p id="result">Result:</p>

    【讨论】:

    • 我在末尾添加了额外的正则表达式替换,以便在第一个字符为零时删除它。如果更改被接受,将接受您的回答。非常感谢。
    • 不幸的是,如果您逐个键入字符,它不会过滤。我在 html 的输入字段中使用它,并在其 onKeyUp()-event 中调用正在执行此正则表达式的方法...
    • @SercanSametSavran 请提供演示小提琴/codepen/等。
    • 抱歉回复晚了。这是一个小提琴:jsfiddle.net/sercan35/hzk2meyo/1/#&togetherjs=CoMGSRCkH6 编辑:它也不需要第一个数字。
    • @SercanSametSavran 我认为问题出在.+。我将其替换为.*
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 2021-12-11
    • 2022-10-31
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 2010-10-16
    相关资源
    最近更新 更多