首頁>Program>source

我正在尝試从此html获取圖像ID(位於src鏈接的末尾,就在檔案型別之前),但是由於某種原因,我編寫的正則表達式無法正常工作.在這種情况下,訪問文件物件不是一種選擇,這就是為什麼我需要使用正則表達式.任何帮助將不胜感激

那是我到目前為止所拥有的,但是在尺寸檢查方面失败了

const imgRegX = /<div class="?preview item"?[^>]*>\s*<img alt="?" sizes= "?"/g;

這是字元串的外观:

<div class="preview item"><img alt=""
sizes="(max-width: 440px) 320px"
src= "https://m.testlink.com/test/zx320y230c_4130512.jpg"
srcset= "https://m.testlink.com/test/zx320y230c_4130512.jpg 320w, https://m.testlink.com/test/zx640y460c_4130512.jpg 640w"></div>
最新回復
  • 9月前
    1 #

    以下內容應满足您的需求; 我通過排除sizesalt屬性對它进行了一些簡化,因為您顯然不需要它们;

    /<div\s+class="preview item"[^>]*>\s*<img\s+[\s\S]*?src=\s?".*?([^\/]+?)"/gi
    

    這裏至少有一个主要的誤解,那就是您使用問號.問號( ? )是一个量詞,在這種情况下,意思是"匹配前一个字元的0或1",但前提是前一个字元本身不是量詞(我可能錯了,但這是我的理解).在那種情况下,它變成一个"懒惰"標志,這意味着它不会贪婪(尽可能匹配多次),而是尽可能少地匹配前面的量詞的模式。

    為了匹配您的字元串並获得所需的ID,我们首先使用 \s 空格字元類(任何空格字元),匹配1次或更多次( + 表示1或更大).其餘正則表達式直到圖像點基本上保持不變。

    圖片標簽開始後,我们匹配1个或多个空格字元,然後匹配0个或多个空格和非空格字元( \S 是一个非空間; 另一个字元類中的速記字元類( [] )將它们組合在一起),並尽可能少地匹配。

    最後,我们进入src屬性; 在這裏,我们在屬性內容(用引號引起来)之前帶有一个可選空格,在標準双引號之前(您可能需要將其更改為 ["'] 如果引號根本没有變化),後跟0或任意數量的任何字元( . (點)与任何字元匹配),在被捕获組跟隨之前尽可能少地匹配( () ),其中包含任何非正斜杠字元(已轉義,因此不会破壞正則表達式)的匹配項,在最终到達最终的結束引號之前,它会匹配1次或多次(越少越好)。

    我多次使用惰性標志,根据我的经驗,如果不使用惰性標志,則匹配的模式有可能超過下一个字元。

    我加入了 i 標記,以使搜尋不區分大小寫,尽管您可能需要根据模式的大小寫敏感程度對其进行更改。

    以下是正則表達式的演示:

    let reg = /<div\s+class="preview item"[^>]*>\s*<img\s+[\s\S]*?src=\s?".*?([^\/]+?)"/gi;
    let str = `<div class="preview item"><img alt=""
    sizes="(max-width: 440px) 320px"
    src= "https://m.testlink.com/test/zx320y230c_4130512.jpg"
    srcset= "https://m.testlink.com/test/zx320y230c_4130512.jpg 320w, https://m.testlink.com/test/zx640y460c_4130512.jpg 640w"></div>`
    console.log(reg.exec(str)[1]);
    

    值得註意的是,對於上述片段,捕获組被鎖定到 1位置 在 .exec()返迴的物件中

    最後,這是我的正則表達式除錯站點Regex101的演示。

    出於所有其他學習目的,我強烈建議您regular-expressions.info,這是我自己學習的方式。

  • c++:樹节點類的變數和模板模板引數以及部分規範
  • javascript:如何使用遞迴来展平nodejs中的json檔案