標準的なリンクの内容をページから取得したいと思います。コードはサーバー上のNode.js(DOMなし)にあります。私は完全な応答(ダウンロードページ)と次のコードを持っています:JavaScript - 正規表現の順序は関係ありませんが必要です存在
var metaRegex = new RegExp(/<link.*?href=['"](.*?)['"].*?rel=['"]canonical['"].*?>/i);
// return correctly: https://support.google.com/recaptcha/?hl=en
// var metaRegex = new RegExp(/<link(?=.*rel=['"]canonical['"])(?=.*href=['"](.*?)['"]).*?>/i);
// return incorrectly: https://www.google.com/accounts/TOS
var metaTag = metaRegex.exec(body);
console.log(metaTag[1]);
最初の式では、relとhref属性の順番で問題があります。それだけ取ります
<link href="https://support.google.com/recaptcha/?hl=en" rel="canonical">
とNOT
<link rel="canonical" href="https://support.google.com/recaptcha/?hl=en">
二式は、両方の発注がかかりますが、それはHREFの最後の出現と一致します。
私は両方の属性の存在を要求する必要があり、それをグループ化できるかのように見えますか?
正しい方法は何ですか?
正しい方法は、HTMLに正規表現を使用しないことです。 http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –
もっと便利なのは、代わりにHTMLパーサーを使用することです。 http://stackoverflow.com/questions/7977945/html-parser-on-node-js –
@AdrianWragg私はあなたに同意しない。正規表現は、文字列の各解析に便利です。私の質問は違う方法でそれを行う方法ではない、私は文字列の正しい部分を取得する方法を尋ねた。私の場合、DOMパーサーは使いすぎです。 – MakoBuk