js regex从包含星号的字符串中提取字符串

时间:2013-03-11 17:28:35

标签: javascript regex

我有一个看起来像这样的字符串:

**********3600 - $20.00

我需要从中提取3600。我不能专门搜索3600,因为字符串是动态的,我不能根据位置进行提取,因为字符串的开头可能有不同数量的星号。所以我需要一个在最后一个星号之后立即提取四个字符的正则表达式,但是我对正则表达式真的不是很好,因为星号是正则表达式中的保留字符,我不知道如何逃避它。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:5)

你可以这样做:

str.match(/^\**(\d+)/)

结果(如果有)将位于返回数组的索引1中。在继续获取号码之前,您可能想要检查返回的结果是否为null

假设

请注意,此解决方案假定字符串任意数量的*开头(我允许数字从头开始的情况),后跟一系列数字(

。要提取的至少一个数字

解释

/^\**(\d+)/
    开头和结尾的
  • /是JavaScript文字RegExp的分隔符。
  • ^匹配字符串的开头
  • \*与文字*匹配,因为*在正则表达式中具有特殊含义。紧随其后的*使其匹配0个或更多星号*的实例。
  • (\d+)\d匹配一个数字(从0到9),+表示重复一次或多次。 ()生成捕获组,以便我们可以提取此正则表达式匹配的内容(如上所示,当您引用返回数组的索引1时)

答案 1 :(得分:2)

如果所有比赛都是第一个数字,你实际上可以这样做:

string.match(/\d+/);

它将匹配第一个数字。由于您没有添加全局标志,因此它只会获得第一个匹配。

答案 2 :(得分:0)

任何四个字符,或总是数字?

/^\**(\d{4})/   if it's just digits
/^\**(.{4})/    for any 4 random characters.
  ^---escape char

请注意反斜杠为转义字符。