Swift - 如何使用正则表达式查找一个 URL 并将其替换为另一个

时间:2021-05-29 18:26:44

标签: html swift uitextview nsregularexpression

我对 Regex 很陌生,但我认识到它的强大。

我在 UITextView 中成功渲染了通过 api 下载的 HTML。但是,我注意到有些图像没有显示。在挖掘代码时,我注意到未出现的图像有多个表示不同大小的图像 URL。

我想要做的是找到包裹在每个块中的第一个图像 URL 并用它替换其他 URL,以便每个块中的所有图像 URL 都相同。

我想出了一些可怕的“解决方案”,使用了一种正则表达式,但没有用。

是否可以:

  1. 找到图的第一个实例
  2. 找到块中的第一个图片网址
  3. 替换后续图片 URL,直到 /figure 被点击
  4. 重复直到 HTML 字符串结束

以下是 JSON 调用返回的 HTML 示例:

<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><span style='font-family:-apple-system;font-size:17'>
<h2 style=font-weight:800;color:0282F8>Header</h2>
  <p style=font-weight:300>Praesent sed molestie lectus, sit amet dictum eros. Donec varius, orci sit amet aliquet ultricies, odio elit maximus sem, et finibus nulla risus vitae sapien. Duis eu nulla et purus porttitor sodales. Nunc eget nisl id tellus elementum placerat. Proin tincidunt mi sollicitudin ex egestas dictum</p>
  <h2 style=font-weight:800;color:0282F8>Header</h2>
  <figure data-align="right" data-img-src="https://uploads/original/image-01.jpg" data-ref-id="1300-2086678" data-size="small" data-ratio="1.2257525083612" data-width="598" data-embed-type="image" style="width: 598px">
    <a class="fluid-height" style="padding-bottom:122.6%" href="https://uploads/original/image-01.jpg" data-ref-id="1300-2086678">
        <img alt="Praesent sed molestie lectus, sit amet dictum eros." src="https://uploads/scale_small/image-01.jpg" srcset="https://uploads/original/image-01.jpg 598w, https://uploads/scale_small/image-01.jpg.jpg 522w" sizes="(max-width: 522px) 100vw, 522px" data-width="522"></a>
    <figcaption style=font-weight:500;font-size:13;color:666666>Pic 1 Caption</figcaption>
  </figure>
  <br>
  <p style=font-weight:300>Praesent sed molestie lectus, sit amet dictum eros. Donec varius, orci sit amet aliquet ultricies, odio elit maximus sem, et finibus nulla risus vitae sapien. Duis eu nulla et purus porttitor sodales. Nunc eget nisl id tellus elementum placerat. Proin tincidunt mi sollicitudin ex egestas dictum</p>
  <h2 style=font-weight:800;color:0282F8>Header</h2>
  <p style=font-weight:300>Praesent sed molestie lectus, sit amet dictum eros. Donec varius, orci sit amet aliquet ultricies, odio elit maximus sem, et finibus nulla risus vitae sapien. Duis eu nulla et purus porttitor sodales. Nunc eget nisl id tellus elementum placerat. Proin tincidunt mi sollicitudin ex egestas dictum</p>
      <figure data-align="right" data-img-src="https://uploads/original/image-02.jpg" data-ref-id="1300-627596" data-size="medium" data-ratio="1.2996254681648" data-width="267" data-embed-type="image" style="width: 267px">
    <a class="fluid-height" style="padding-bottom:130.0%" href="https://uploads/original/image-02.jpg" data-ref-id="1300-627596">
        <img alt="Praesent sed molestie lectus, sit amet dictum eros." src="https://uploads/original/image-02.jpg" srcset="https://uploads/original/image-02.jpg 267w" sizes="(max-width: 267px) 100vw, 267px" data-width="267"></a>
    <figcaption style=font-weight:500;font-size:13;color:666666>Pic 2 Caption</figcaption>
  </figure>
  <br>
      <p style=font-weight:300>Praesent sed molestie lectus, sit amet dictum eros. Donec varius, orci sit amet aliquet ultricies, odio elit maximus sem, et finibus nulla risus vitae sapien. Duis eu nulla et purus porttitor sodales. Nunc eget nisl id tellus elementum placerat. Proin tincidunt mi sollicitudin ex egestas dictum</p>
  <p style=font-weight:300><b>Praesent sed molestie lectus, sit amet dictum eros. Donec varius, </b></p>
  <figure data-align="right" data-img-src="https://uploads/original/image-03.jpg" data-ref-id="1300-2787249" data-size="small" data-ratio="0.42196531791908" data-width="346" data-embed-type="image" style="width: 346px">
    <a class="fluid-height" style="padding-bottom:42.2%" href="https://uploads/original/image-03.jpg" data-ref-id="1300-2787249">
      <img alt="Praesent sed molestie lectus, sit amet dictum eros." src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" sizes="(max-width: 320px) 100vw, 320px" data-width="320" class="js-lazy-load-image" data-src="https://uploads/small_scale/image-03.jpg" data-srcset="https://uploads/original/image-03.jpg 346w, https://uploads/small_scale/image-03.jpg 320w">
      <noscript>
          <img alt="Praesent sed molestie lectus, sit amet dictum eros." src="https://uploads/small_scale/image-03.jpg" srcset="https://uploads/original/image-03.jpg 346w, https://uploads/small_scale/image-03.jpg 320w" sizes="(max-width: 320px) 100vw, 320px" data-width="320">
        </noscript>
    </a>
    <figcaption style=font-weight:500;font-size:13;color:666666>Pic 3 Caption</figcaption>
  </figure>
  <br>
  <p style=font-weight:300>Praesent sed molestie lectus, sit amet dictum eros. Donec varius, orci sit amet aliquet ultricies, odio elit maximus sem, et finibus nulla risus vitae sapien. Duis eu nulla et purus porttitor sodales. Nunc eget nisl id tellus elementum placerat.</p>
  <h3 style=font-weight:600>Sub Header</h3>
  <p style=font-weight:300>Praesent sed molestie lectus, sit amet dictum eros. Donec varius, orci sit amet aliquet ultricies, odio elit maximus sem, et finibus nulla risus vitae sapien. Duis eu nulla et purus porttitor sodales. Nunc eget nisl id tellus elementum placerat. Proin tincidunt mi sollicitudin ex egestas dictum</p>
      </span></body>

感谢您的帮助。

0 个答案:

没有答案