我有一个看起来像这样的字符串:
**********3600 - $20.00
我需要从中提取3600
。我不能专门搜索 3600,因为字符串是动态的,而且我不能根据位置进行提取,因为字符串开头可能有不同数量的星号。所以我需要一个正则表达式,它会在最后一个星号之后立即提取四个字符,但我对正则表达式真的不是很好,而且由于星号是正则表达式中的保留字符,我不知道如何转义它。任何人都可以帮忙吗?
我有一个看起来像这样的字符串:
**********3600 - $20.00
我需要从中提取3600
。我不能专门搜索 3600,因为字符串是动态的,而且我不能根据位置进行提取,因为字符串开头可能有不同数量的星号。所以我需要一个正则表达式,它会在最后一个星号之后立即提取四个字符,但我对正则表达式真的不是很好,而且由于星号是正则表达式中的保留字符,我不知道如何转义它。任何人都可以帮忙吗?
你可以这样做:
str.match(/^\**(\d+)/)
结果(如果有)将位于返回数组的索引 1 中。null
在继续获取数字之前,您可能需要检查返回的结果是否是。
请注意,此解决方案假定字符串以任意数字*
开头(我允许数字从开头开始的情况),后跟要提取的数字序列(至少一个数字)。
/^\**(\d+)/
/
开头和结尾是 JavaScript 文字的分隔符RegExp
。^
匹配字符串的开头\*
匹配 literal *
,因为*
在正则表达式中有特殊含义。*
紧随其后的 make it 匹配 0 个或多个 asterisk实例*
。(\d+)
:\d
匹配一个数字(从 0 到 9),+
表示重复一次或多次。()
生成一个捕获组,以便我们可以提取与此正则表达式匹配的内容(如上所示,当您引用返回数组的索引 1 作为数字时)。如果所有匹配项都是第一个数字,您实际上可以这样做:
string.match(/\d+/);
它将匹配第一个数字。由于您不添加全局标志,因此它只会获得第一个匹配项。
任何四个字符,还是总是数字?
/^\**(\d{4})/ if it's just digits
/^\**(.{4})/ for any 4 random characters.
^---escape char
注意反斜杠作为转义字符。