给定此字符串:
var str = 'A1=B2;C3,D0*E9+F6-';
在这种情况下,我想检索从字符串开头到 'D0*'
(不包括)的子字符串:
'A1=B2;C3,'
我知道如何结合使用substr
和indexOf
方法来实现这一点:
str.substr(0, str.indexOf('D0*'))
现场演示:http://jsfiddle.net/simevidas/XSu22/
但是,这显然不是最好的解决方案,因为它包含冗余(str
名称必须写入两次)。通过将 match
方法与捕获子字符串的正则表达式一起使用,可以避免这种冗余:
str.match(/???/)[1]
我们必须将哪个正则表达式文本传递到match
以确保返回正确的子字符串?
我的猜测是这样的:/(.*)D0*/
(这有效),但我对正则表达式的经验相当有限,所以我需要确认......
试试这个:
/(.*?)D0*/.exec(str)[1]
或:
str.match(/(.*?)D0*/)[1]
在这里演示
?
紧跟在量词之后会使量词不贪婪(使其匹配定义的区间的最小值而不是最大值)。 这是从哪里来的
/^(.+?)D0*/
在这里试试: http://rubular.com/r/TNTizJLSn9
/^.*(?=D0*)/
更多文本达到字符限制...
您可以执行数字组,例如您的示例。
/^(.*?)foo/
这意味着一些想法:
- 将所有内容存储在组中,从开始(
0
) - 停止,但不存储在找到的
foo
(indexOf
)
之后,您需要匹配并获得
'hello foo bar foo bar'.match(/^(.*?)foo/)[1]; // will return "hello "
这意味着这将适用于str
变量并获得存在的第一个(也是唯一的)数字组。相反,[0]
[1]
意味着将获得所有匹配的代码。
再见:)