【发布时间】:2012-11-11 17:50:50
【问题描述】:
我想修剪字符串,例如。
铅笔(4,99 美元)
只是一个括号数值:
4,99
我现在了解一下 sed 中的正则表达式,所以我会这样做:sed "s#.*(##" | sed "s# USD.*##"。但是我应该如何在 javascript replace 函数中使用任何正则表达式?
【问题讨论】:
标签: javascript regex
我想修剪字符串,例如。
铅笔(4,99 美元)
只是一个括号数值:
4,99
我现在了解一下 sed 中的正则表达式,所以我会这样做:sed "s#.*(##" | sed "s# USD.*##"。但是我应该如何在 javascript replace 函数中使用任何正则表达式?
【问题讨论】:
标签: javascript regex
这里不需要替换。使用match 函数可能更简单、更合适:
var priceStr;
var match = "Pencil (4,99 USD)".match(/[\d,]+/)
if(match)
priceStr = match[0];
您可以稍微改进一下正则表达式。这个只会给你第一个由数字和/或逗号组成的子字符串。但是,如果您的字符串总是这么短并且采用这种格式,那应该没问题。但是,如果名称可以包含数字或逗号,您可能应该以括号开头并使用捕获组:
var priceStr;
var match = "Pencil, black, thickness 2 (4,99 USD)".match(/\(([\d,]+)/)
if(match)
priceStr = match[1];
对后一个正则表达式的简短解释。 \( 只是一个文字左括号。未转义的括号“捕获”内部匹配的内容,以便您稍后可以在没有文字左括号的情况下检索价格。 [\d,] 是一个字符类,匹配数字或逗号,+ 只是重复 1 次或多次。然后我们可以从match[0] 中检索完整匹配,并从match[1] 中检索(第一个)捕获组。
【讨论】:
priceStrNew = priceStr.replace(/[,]/, ".");?
/\((\d*,\d{0,2})/
( (但正则表达式试图找到一个)。另请注意,您需要像\. 一样转义.,否则. 是匹配任何非换行符的正则表达式通配符。
我建议你这样做:
str.replace(/[^\d\.\,]/, "")
这意味着去掉所有不是数字、逗号或点的东西。
【讨论】:
几种可能性之一是:
var match = "Pencil (4,99 USD)".match(/[^(]+(?= USD)/);
【讨论】: