Regex equivalent to str.substr(0, str.indexOf('foo')

Regex equivalent to str.substr(0, str.indexOf('foo'))

本文关键字:str foo indexOf equivalent to substr Regex      更新时间:2023-09-26

给定此字符串:

var str = 'A1=B2;C3,D0*E9+F6-';

在这种情况下,我想检索从字符串开头到 'D0*'(不包括)的子字符串:

'A1=B2;C3,'

我知道如何结合使用substrindexOf方法来实现这一点:

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
  • 停止,但不存储在找到的fooindexOf

之后,您需要匹配并获得

'hello foo bar foo bar'.match(/^(.*?)foo/)[1]; // will return "hello "

这意味着这将适用于str变量并获得存在的第一个(也是唯一的)数字组。相反,[0] [1]意味着将获得所有匹配的代码。

再见:)