Javascript 如何定义正则表达式从价格字符串中提取货币符号?
我有一个价格字符串,我想从中获得货币符号(符号长度可变) 价格可以用不同的格式表示。我正在删除点、逗号和数字,但有时在货币符号前会显示逗号或点Javascript 如何定义正则表达式从价格字符串中提取货币符号?,javascript,regex,Javascript,Regex,我有一个价格字符串,我想从中获得货币符号(符号长度可变) 价格可以用不同的格式表示。我正在删除点、逗号和数字,但有时在货币符号前会显示逗号或点 var k = "111,112,258$".replace(/\d+([,.]\d+)?/g, ""); console.log(k) //log shows ,$ 我认为第二个逗号或点就是问题所在。为什么会发生这种情况?您可以简化正则表达式,只替换您感兴趣的字符,而不必提及其他字符: "111,112,258$".replace(/[\d,.]/g
var k = "111,112,258$".replace(/\d+([,.]\d+)?/g, "");
console.log(k) //log shows ,$
我认为第二个逗号或点就是问题所在。为什么会发生这种情况?您可以简化正则表达式,只替换您感兴趣的字符,而不必提及其他字符:
"111,112,258$".replace(/[\d,.]/g, "")
输出(从节点终端完成的屏幕截图):
这将替换输入字符串中的数字、逗号、点和空格
var k = "111,112.111$".replace(/[\d,.\s]/g, "");
console.log(k) // $
编辑:
如果你想支持阿拉伯/印度数字,你可以像这样进一步扩展它
var k = "١٢٣,١١$".replace(/[\d,.\s,١-٩]/g, "");
console.log(k) // $
我不想要我试过的号码“111112258$”。替换(/\d+([,\.]\d+)?/g,”;但事实并非如此work@mike哦,很抱歉我错过了,在这种情况下,它很简单-只需将
\d
添加到正则表达式中,请参见上面的更正答案。@alfasin括号内的点不需要转义,那么我的正则表达式有什么问题吗?谢谢!它起作用了。但是你能解释一下我的正则表达式有什么问题吗?@mike你发布的正则表达式的问题是第一个匹配将捕获11111 2
,因为(,112
)匹配第一个捕获组([,.]\d+),
第二个匹配(因为它是全局“g”标志)将首先尝试查找一个数字,这就是为什么它从258
开始匹配,留下最后一个逗号unmatched@mike要使它与您发布的正则表达式一起工作,只需将问题?
替换为*
,这意味着它将匹配该部分的零个或多个(,\d+)
@mike不必担心为什么支持空白?价格不应该包括空格,不是吗?