lis*_*aro 31 javascript jquery
我需要一个函数来删除除数字+字符之外的所有字符:'$','.' 和','.
我怎样才能做到这一点?
nin*_*cko 47
> 'worth $12,345.00 dollars'.replace(/[^0-9$.,]/g, '')
"$12,345.00"
Run Code Online (Sandbox Code Playgroud)
这就是你要求的答案.我不建议它提取货币,因为它可能会遇到这样的问题:
> 'A set of 12 worth between $123 and $456. A good buy.'.replace(/[^0-9$.,]/g, '')
"12$123$456.."
Run Code Online (Sandbox Code Playgroud)
如果您只想提取类似货币的表单的表达式,您可以:
> 'set of 12 worth between $123.00 and $45,678'.match(/\$[0-9,]+(?:\.\d\d)?/g)
["$123.00", "$45,678"]
Run Code Online (Sandbox Code Playgroud)
如果您需要更复杂的匹配(例如,您只想提取美元值并忽略分值),您可以执行类似如何在JavaScript正则表达式中访问匹配组的操作?例如:
> var regex = /\$([0-9,]+)(?:\.(\d\d))?/g;
> while (true) {
> var match = regex.exec('set of 12 worth between $123.00 and $45,678');
> if (match === null)
> break;
> console.log(match);
> }
["$123.00", "123", "00"]
["$45,678", "45,678", undefined]
Run Code Online (Sandbox Code Playgroud)
(因此要小心,javascript regexp对象不是不可变/最终对象,但有状态,可以用于迭代,如上所示.因此,你不能"重用"正则表达式对象.即使传递myRegex2 = RegExp(myRegex)也会混合状态;一个非常糟糕的语言决策请参阅有关如何在javascript中正确克隆正则表达式的附录.)如果您愿意,可以将上述内容重写为非常奇特的for循环:
var myString = 'set of 12 worth between $123.00 and $45,678';
var regex = '\$([0-9,]+)(?:\.(\d\d))?';
for(var match, r=RegExp(regex,'g'); match=regex.exec(myString) && match!==null; )
console.log(match);
Run Code Online (Sandbox Code Playgroud)
附录 - 为什么你不能重用javascript RegExp对象
糟糕的语言设计,展示了如何重用状态:
var r=/(x.)/g
var r2 = RegExp(r)
r.exec('xa xb xc')
["xa", "xa"]
r2.exec('x1 x2 x3')
["x2", "x2"]
Run Code Online (Sandbox Code Playgroud)
如何在javascript中正确克隆正则表达式(你必须用字符串定义它):
var regexTemplate = '(x.)'
var r = RegExp(regexTemplate, 'g')
var r2 = RegExp(regexTemplate, 'g')
r.exec('xa xb xc')
["xa", "xa"]
r2.exec('x1 x2 x3')
["x1", "x1"]
Run Code Online (Sandbox Code Playgroud)
如果您希望以编程方式保留标记,例如'g',您可以使用regexTemplate = ['(x.)', 'g']; RegExp.apply(this, regexTemplate).
| 归档时间: |
|
| 查看次数: |
23646 次 |
| 最近记录: |