我尝试使用允许外观的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*?)
。
如何修复我的正则表达式来完成我需要的工作?
答案 0 :(得分:0)
(?!.*?\/voice\/m\/contact\/\w+[^a-zA-Z0-9]+[a-zA-Z\s\d]*.*)(?<=>)[a-zA-Z\s\d]*
试试这个。见演示。
答案 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>)