1

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

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

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

4

3 回答 3

5

你可以这样做:

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

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

假设

请注意,此解决方案假定字符串任意数字*开头(我允许数字从开头开始的情况),后跟要提取的数字序列(至少一个数字)。

解释

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

如果所有匹配项都是第一个数字,您实际上可以这样做:

string.match(/\d+/);

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

于 2013-03-11T17:36:46.237 回答
0

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

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

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

于 2013-03-11T17:30:30.677 回答