我有以下格式的字符串,并希望使用正则表达式捕获/d/
和/edit
之间的部分:
/presentation/d/1JHjE6pWJRujtMQaXcL92HBD8ZKq35au8moEv_zP2D_-0/edit
当我使用此(\/d\W)(.*)\b\/
时,我能够捕获/d/1JHjE6pWJRujtMQaXcL92HBD8ZKq35au8moEv_zP2D_-0/
;不是我需要的实际部分(严格来说是/d/
和/edit
之间的字符串)。
我怎样才能做到这一点?
答案 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]);
在这里演示:
答案 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
是一个标志(全局模式标志)。它帮助我们获得所有匹配,并且在我们获得正则表达式的第一场比赛后不会返回。