javascript相当于sed

时间:2012-11-11 17:50:50

标签: javascript regex

我想剪裁字符串,例如。

  

铅笔(4,99美元)

只是括号数值:

  

4,99

我现在有点关于sed中的正则表达式,所以我会这样做:sed "s#.*(##" | sed "s# USD.*##"。但是我应该如何在javascript replace函数中使用任何正则表达式?

3 个答案:

答案 0 :(得分:6)

此处无需更换。使用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]和(第一个)捕获组的完整匹配。

答案 1 :(得分:1)

我建议你这样做:

str.replace(/[^\d\.\,]/, "")

这意味着摆脱不是数字,逗号或点的所有内容。

答案 2 :(得分:0)

其中一种可能性是:

var match = "Pencil (4,99 USD)".match(/[^(]+(?= USD)/);