正则表达式从数字字符串中剥离千位分隔符?

OnT*_*Fly 6 javascript regex language-agnostic

我有包含千位分隔符的字符串,但是没有字符串到数字函数想要正确使用它(使用JavaScript).我正在考虑通过剥离所有的千位分隔符来"准备"字符串,留下任何其他未处理的东西,并让Number/ parseInt/ parseFloat函数(我对其行为感到满意)来决定其余部分.但似乎我不知道哪个RegExp可以做到这一点!

也欢迎更好的想法!


更新:

对不起,答案让我觉得它是多么糟糕的问题.我要实现的目标是:1)仅在任何情况下剥离千位分隔符,但2)不要打扰原始字符串,以便在无效数字的情况下获得NaN.

更新更新:

JavaScript仅限于解析的英语语言环境,因此为了简单起见假设千位分隔符是','当然,它永远不会匹配任何语言环境中的小数分隔符,因此更改为任何其他语言环境不应该造成问题)

现在,解析函数:

parseFloat('1023.95BARGAIN BYTES!')  // parseXXX functions just "gives up" on invalid chars and returns 1023.95
Number('1023.95BARGAIN BYTES!')      // while Number constructor behaves "strictly" and will return NaN
Run Code Online (Sandbox Code Playgroud)

有时我使用rhw松散的,有时严格.我想弄清楚为这两个函数准备字符串的最佳方法.

关于数字的有效性:

'1,023.99'是完美的英文编号,剥离所有逗号将导致正确的结果. '1,0,2,3.99'虽然通用的逗号剥离会给出'1023.99'不太可能正确的结果.

Cod*_*key 7

我会冒昧地把我的建议扔进锅里:

注意:修改

stringWithNumbers = stringwithNumbers.replace(/(\d+),(?=\d{3}(\D|$))/g, "$1");
Run Code Online (Sandbox Code Playgroud)

应该转

1,234,567.12
1,023.99
1,0,2,3.99
the dang thing costs $1,205!!
95,5,0,432
12345,0000
1,2345
Run Code Online (Sandbox Code Playgroud)

成:

1234567.12
1023.99
1,0,2,3.99
the dang thing costs $1205!!
95,5,0432
12345,0000
1,2345
Run Code Online (Sandbox Code Playgroud)

我希望这很有用!

编辑:

可能还需要进行其他更改,但并非没有副作用:

(\b\d{1,3}),(?=\d{3}(\D|$))
Run Code Online (Sandbox Code Playgroud)

这会将+第一组数字的"一个或多个"量词()更改为"一到三"量词({1,3}),并在其前面添加"字边界"断言.它会阻止像1234,123==> 这样的替换1234123.但是,它也会阻止可能需要的替换(如果前面有字母或下划线),例如A123,789_1,555(将保持不变).