嵌套的外观可以绕过最大限度的边界

时间:2014-09-08 09:08:56

标签: regex

我尝试使用允许外观的JavaScript正则表达式来匹配字符串中的特定项目,但我相信我搞砸了外观,可能是在它们的嵌套中,或者我正在使用完全错误的外观。

到目前为止,这是我整理的正则表达式:

(?<=<a class="" href="/voice/m/contact/(?=\S*?))([\s\S]*?)(?=</a>)

以下是我试图从中获取匹配字符串的片段:

<b>

<a class="" href="/voice/m/contact/dhbte4tgsbhh65u6">Name</a>
</b>

在上面的示例中,当我希望匹配dhbte4tgsbhh65u6">Name时,正则表达式匹配Name。我某某地需要包含dhbte4tgsbhh65u6">匹配的(?=\S*?)

如何修复我的正则表达式来完成我需要的工作?

2 个答案:

答案 0 :(得分:0)

(?!.*?\/voice\/m\/contact\/\w+[^a-zA-Z0-9]+[a-zA-Z\s\d]*.*)(?<=>)[a-zA-Z\s\d]*

试试这个。见演示。

http://regex101.com/r/iX5xR2/22

答案 1 :(得分:0)

Lookahead将进行零宽度匹配,它不会匹配任何角色。因此,当您使用此正则表达式(?<=<a class="" href="/voice/m/contact/(?=\S*?))时,它首先检查字符串contact/后面是零个或多个非空格字符。如果是,则它会查看实际位于contact/内的<a class="" href="/voice/m/contact/字符串。所以这个看起来很好,

(?<=<a class="" href="/voice/m/contact/(?=\S*?))

将匹配标记设置在字符串contact/之后,并将所有空格和非空格字符([\s\S]*?)捕获到下一个结束</a>标记。

如果您的语言支持\K,那么您不需要使用lookbehind来提取Name部分。

<a class="" href="/voice/m/contact/[^>]*>\K([\s\S]*?)(?=</a>)

DEMO