【问题标题】:javascript equivalent to sed相当于 sed 的 javascript
【发布时间】:2012-11-11 17:50:50
【问题描述】:

我想修剪字符串,例如。

铅笔(4,99 美元)

只是一个括号数值:

4,99

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

【问题讨论】:

标签: javascript regex


【解决方案1】:

这里不需要替换。使用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] 中检索(第一个)捕获组。

【讨论】:

  • 代码应该在 try-block 中,因为如果没有找到匹配项就会抛出。
  • @gogowitczak 你去吧 ;) ...对不起,我通常这样做,但由于“我对正则表达式有所了解”而将其省略了;)
  • @gogowitczak 你的意思是priceStrNew = priceStr.replace(/[,]/, ".");
  • @gogowitczak 这就是我所说的“你可以稍微改进一下正则表达式。”。例如,如果您可以确定总是是逗号,则可以使用/\((\d*,\d{0,2})/
  • @gogowitczak 当然。您的输入字符串中不再有文字 ( (但正则表达式试图找到一个)。另请注意,您需要像\. 一样转义.,否则. 是匹配任何非换行符的正则表达式通配符。
【解决方案2】:

我建议你这样做:

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

这意味着去掉所有不是数字、逗号或点的东西。

【讨论】:

  • 您应该注意,如果产品的 (?) 名称包含数字或小数分隔符(就像我的第一个代码 sn-p 一样),则会出现问题。
【解决方案3】:

几种可能性之一是:

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

【讨论】:

    猜你喜欢
    • 2013-08-30
    • 2020-07-20
    • 2010-09-07
    • 2013-04-13
    • 2010-11-24
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多