使用JavaScript正则表达式从URL获取用户和推文ID

时间:2014-01-16 12:05:54

标签: javascript regex twitter

所以我有推文网址,例如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个匹配项。在解释为新行之后,我该如何将它或例如所有内容分开?

1 个答案:

答案 0 :(得分:0)

尽可能避免使用正则表达式解析HTML。说过你的表达问题是贪婪的.+,它会尽可能地匹配。相反,您可以使用.+?使其不合适(匹配尽可能少的字符)。或者您可以限制.匹配的内容,例如使用[^\s<>]+代替.+

此外,您可能希望将[^\/]*更改为[^\/"\s]*,以使其更有效。