Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何定义正则表达式从价格字符串中提取货币符号?_Javascript_Regex - Fatal编程技术网

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不必担心为什么支持空白?价格不应该包括空格,不是吗?