rob*_*r78 2 javascript regex replace
数字字符是
0 1 2 3 4 5 6 7 8 9
dot
comma
minus at the start of the string
我需要从字符串中删除所有非数字字符。这里的例子
123 -> 123
123.45 -> 123.45
123,45 -> 123,45
-123 -> -123
-123.45 -> -123.45
-123,45 -> -123,45
--123.45 -> -123.45
--123,45 -> -123,45
a -> empty string
-a -> -
a123 -> 123
-a123 -> -123
a123.45 -> 123.45
-a123.45 -> -123.45
a123.b45 -> 123.45
-a123.b45 -> -123.45
123.-34 -> 123.34
-123.-34 -> -123.34
--123.-34 -> -123.34
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止所拥有的
"123.45abc".replace(/[^0-9.,]/g,""); -> 123.45
但这失败了
"-123.45abc".replace(/[^0-9.,]/g,""); -> 123.45
这有效
"-123.45abc".replace(/-[^0-9.,]/g,""); -> -123.45
但现在失败了
"-123.45-abc".replace(/-[^0-9.,]/g,""); -> -123.45bc
这个答案几乎解决了我的问题,但字符串内的减号没有被删除。
我正在使用正则表达式在 javascript 中执行此操作。正则表达式不是强制性的。
更新
输入最多有一个逗号或一个点。12.34.56.78永远不会被输入
要删除字符串开头的除数字、逗号、点和连字符之外的所有字符,您可以使用
text = text.replace(/^(-)|[^0-9.,]+/g, '$1');
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示
细节
^(-)- 字符串的开头和-捕获到组 1 中的a|- 或者[^0-9.,]+- 除数字之外的任何 1+ 个字符,.以及,.替换为$1,即如果有前导,- 它将保留在结果中。
只保留最后一个非最终逗号/点的更全面的正则表达式是
text = text.replace(/^(-)|[.,](?=[^.,]*[.,](?!$))|[,.]+$|[^0-9.,]+/g, '$1');
Run Code Online (Sandbox Code Playgroud)
请参阅此正则表达式演示
在这里,添加了更多替代方案:
[.,](?=[^.,]*[.,](?!$))- 匹配 .or,后面跟着另一个.或,0 个以上字符(除了.and之外)之后的某个位置,[,.]+$- 匹配任何 1+ 个尾随逗号/点。