所以我有推文网址,例如https://twitter.com/ESPNFC/status/423771542627966976
。
我网站上的这个网址会自动解析为
<a href="https://twitter.com/ESPNFC/status/423771542627966976">https://twitter.com/ESPNFC/status/423771542627966976</a>
我需要匹配此模式,并获取用户名和推文ID。
我这样做了
/<a href="(http|https):\/\/twitter.com\/([^\/]*)\/status\/([^\/]*)">.+<\/a>/g
。当每行有1条推文时,一切正常,但如果一行中有2条或更多条推文,那么正则表达式同时匹配它们并将其分组为一条,但我需要将它们分开。
例如:
<a href="https://twitter.com/ESPNFC/status/423771542627966976">https://twitter.com/ESPNFC/status/423771542627966976</a>
<a href="https://twitter.com/ESPNFC/status/423771542627966976">https://twitter.com/ESPNFC/status/423771542627966976</a>
返回2场比赛,但
<a href="https://twitter.com/ESPNFC/status/423771542627966976">https://twitter.com/ESPNFC/status/423771542627966976</a><a href="https://twitter.com/ESPNFC/status/423771542627966976">https://twitter.com/ESPNFC/status/423771542627966976</a>
返回包含两个网址的1个匹配项。在解释为新行之后,我该如何将它或例如所有内容分开?
答案 0 :(得分:0)
尽可能避免使用正则表达式解析HTML。说过你的表达问题是贪婪的.+
,它会尽可能地匹配。相反,您可以使用.+?
使其不合适(匹配尽可能少的字符)。或者您可以限制.
匹配的内容,例如使用[^\s<>]+
代替.+
。
此外,您可能希望将[^\/]*
更改为[^\/"\s]*
,以使其更有效。