正则表达式:匹配,但不包括匹配的部分

时间:2017-02-20 20:37:10

标签: javascript regex

这是文字:

https://www.google.com/url?rct=3Dj\u0026sa=3Dt\u0026url=3Dhttps://rivesjournal.com/inside-track-trading-focus-on-shares-of-adobe-systems-inc-adbe/48453/\u0026ct=3Dga\u0026cd=3DCAEYASoTOT

我想获得实际链接:

https://rivesjournal.com/inside-track-trading-focus-on-shares-of-adobe-systems-inc-adbe/48453/

/=3Dhttps.*\//g包括=3D,但我希望没有它。我怎么能搞清楚这一点?

这里是regex

5 个答案:

答案 0 :(得分:1)

make = 3D作为积极的背后隐藏

select application_status,application_uuid,changed_at_utc,changed_by
from (select t.*,
      max(case when application_status='Ready for Scoring' then changed_at_utc end) over(partition by application_uuid) as status_time
      from tablename t
      ) t1
where changed_at_utc > status_time

演示:https://regex101.com/r/sHvRMA/2

<强>更新

对于特定于JavaScript的代码,请使用capture groups

(?<==3D)https.*\/

答案 1 :(得分:1)

一个选项是通过使用带有http.*锚点的否定前瞻来防止第一个^子字符串匹配:

Example Here

(?!^)https:.*\/

这基本上与https:.*\/匹配,只要它不在字符串的开头。

段:

&#13;
&#13;
var string = 'https://www.google.com/url?rct=3Dj\u0026sa=3Dt\u0026url=3Dhttps://rivesjournal.com/inside-track-trading-focus-on-shares-of-adobe-systems-inc-adbe/48453/\u0026ct=3Dga\u0026cd=3DCAEYASoTOT';

console.log(string.match(/(?!^)https:.*\//)[0]);
&#13;
&#13;
&#13;

但是,上面的表达式不会涵盖所有边缘情况,因此更好的选择就是使用捕获组:

Updated Example

=3D(https.*\/)

段:

&#13;
&#13;
var string = 'https://www.google.com/url?rct=3Dj\u0026sa=3Dt\u0026url=3Dhttps://rivesjournal.com/inside-track-trading-focus-on-shares-of-adobe-systems-inc-adbe/48453/\u0026ct=3Dga\u0026cd=3DCAEYASoTOT';

console.log(string.match(/=3D(https.*\/)/)[1]);
&#13;
&#13;
&#13;

您还可以使用否定字符类,例如[^\\]+来匹配一个或多个非\字符:

Updated Example

=3D(https[^\\]+)

答案 2 :(得分:0)

这是一个很好的资源,可以搞清楚正则表达式匹配

http://regexr.com/

答案 3 :(得分:0)

我从来没有在Javascript中使用正则表达式,但我在bash,sh,ps和C#中广泛使用它们,据我所知,这就是你要找的东西:

/=3D(http.*\/)\\

https://regex101.com/r/bupG3W/1

用于捕捉比赛中的小组

var myString = "something format_abc";
var myRegexp = /(?:^|\s)format_(.*?)(?:\s|$)/g;
var match = myRegexp.exec(myString);
console.log(match[1]); // abc

答案 4 :(得分:0)

对于将正则表达式与支持有限功能子集的语言(例如CMake)一起使用的人,其他答案均无效。在这种情况下,一种选择是只捕获前面的字符串(在OP的情况下为=3D),然后使用字符串操作将事实结束后从其余匹配项中删除。它不优雅,但可以。