通过regex(javascript)从字符串中查找随机字符串

时间:2017-05-12 01:42:05

标签: javascript regex

我有以下格式的字符串,并希望使用正则表达式捕获/d//edit之间的部分:

/presentation/d/1JHjE6pWJRujtMQaXcL92HBD8ZKq35au8moEv_zP2D_-0/edit

当我使用此(\/d\W)(.*)\b\/时,我能够捕获/d/1JHjE6pWJRujtMQaXcL92HBD8ZKq35au8moEv_zP2D_-0/;不是我需要的实际部分(严格来说是/d//edit之间的字符串)。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

尝试使用以下模式:

/presentation/d/(.*?)/edit

var input = '/presentation/d/1JHjE6pWJRujtMQaXcL92HBD8ZKq35au8moEv_zP2D_-0/edit';
var rx = /\/presentation\/d\/(.*?)\/edit/g;
var arr = rx.exec(input);
console.log(arr[1]);

在这里演示:

Rextester

答案 1 :(得分:0)

<强> TL; DR

如果您始终拥有要在/d//edit之间获得的字符串,则可以使用此正则表达式捕获它:(.*\/d\/)(.*)(\/edit.*);它应该是第二组。

以下是如何获得它的说明:

var data = "/presentation/d/1JHjE6pWJRujtMQaXcL92HBD8ZKq35au8moEv_zP2D_-0/edit";
my_preferred_string = data.match(/(.*\/d\/)(.*)(\/edit.*)/)[2];
console.log(my_preferred_string);

解释正则表达式,/(.*\/d\/)(.*)(\/edit.*)/g

在这里,我们有三组;这些组被限制在括号内,如:(the group elements),其中组元素代表所需的匹配。

使用(.*\/d\/)抓取第一组。

在该组的表达式中,.*用于捕获除行终止符之外的任何字符。在同一部分中,我们已经使用量词*来进行零次和无限次之间的匹配,尽可能多次。然后,\/匹配/字符(区分大小写),其中前面的\是转义符,后跟字母d(区分大小写,以及特别是 d 作为一个字符),以\/结尾,就像d之前一样。

第二组是我们感兴趣的实际部分,使用(.*)进行捕获,其中.*就像上面捕获前面的表达式一样。

使用(\/edit.*)捕获第3组,其中\/.*与上述(第1组)相同,edit作为字符匹配< em>编辑(区分大小写)。

最后,g是一个标志(全局模式标志)。它帮助我们获得所有匹配,并且在我们获得正则表达式的第一场比赛后不会返回。