正则表达式以获取链接和链接描述

时间:2014-02-20 18:34:48

标签: javascript php regex

我正在尝试开发自己的链接语法:

[this is google|google.com]

我知道如何在方括号(\[(.*?)\])之间获取文本,但我不确定如何提取单个部分。此外,如果有人想简单地添加没有链接的方括号(例如[this is google]),则不会将其检测为链接。

任何人都能为我提供一些方向吗?我需要访问这两个部分。

3 个答案:

答案 0 :(得分:0)

你走了:

\[(.*?)\|(.*?)\]

基本上,只需添加另一个捕获组。 \|以惊人的语法转义|。 :)

http://regex101.com/r/dS3uJ9

答案 1 :(得分:0)

你可以使用;

s='[this is google|google.com]';
m = s.match(/\[([^|]+)\|([^\]]+)\]/);

然后使用m[1]m[2]进行说明和链接。

更新:为了显示两种正则表达式方法的性能差异,我创建了2个regex101链接:

  1. http://regex101.com/r/xZ6nB7(使用否定)
  2. http://regex101.com/r/rI0eH8(使用延迟量词.*?
  3. 要查看效果差异,请点击两个链接左上角的 Launch regex debugger 链接。

    您会注意到我的正则表达式显示:

      

    +匹配1 - 完成11个步骤

    .*?链接显示了这一点:

      

    +匹配1 - 完成59步

    这证明基于否定的正则表达式比.*方法更有效。

    PS:如果您点击 +Match 1 - finished in 59 steps ,您会在第二个链接中看到红色BACKTRACK消息。

答案 2 :(得分:0)

不是吗?试试这个正则表达式

(\[(.*?)\|?(.*?)\])