Как сделать это Regex с Javascript - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь создать регулярное выражение для вызова значения «uploadFini sh». Я хочу сделать это с регулярным выражением. Содержимое внутри огромного html:

MORE HTML
<meta property="al:android:app_name" content="I" />
<meta property="al:android:package" content="" />
<meta property="al:android:url" content="https://" />


<meta name="medium" content="image" />
<meta property="og:type" content="" />



        <script type="application/ld+json">
            {"@context":"http:\/\/schema.org","@type":"ImageObject","caption":"011 de 366\nMagali \ud83c\udf49 \n#magali #TurmadaMonica #illustration #ilustra\u00e7\u00e3o #art #drawing.","representativeOfPage":"http:\/\/schema.org\/True","uploadFinish":"2020-01-11T22:08:58","author":{"@type":"Person","alternateName":"@luis","mainEntityofPage":{"@type":"ProfilePage","@id":"https:\/\/www.example.com\/luis\/"}},"comment":[{"@type":"Comment","text":"\ud83d\udc9e\ud83d\udc9e\ud83d\udc9e\ud83d\udc9e\ud83d\udc9e\ud83d\udc9e\ud83d\udc9e\ud83d\udc9e\ud83d\udc9e\ud83d\udc9e\ud83d\udc9e\ud83d\udc9e\ud83d\udc9e\ud83d\udc9e\ud83d\udc9e\ud83d\udc9e","author":{"@type":"Person","alternateName":"@katiagualtieri985","mainEntityofPage":{"@type":"ProfilePage","@id":"https:\/\/www.example.com\/katiagualtieri985\/"}}}],"commentCount":"1","contentLocation":{"@type":"Place","name":"Florian\u00f3polis, Santa Catarina","mainEntityofPage":{"@type":"CollectionPage","@id":"https:\/\/www.example.com\/explore\/locations\/213145014\/A-B-C-D\/"},"address":{"@type":"PostalAddress","addressLocality":"Florian\u00f3polis, Santa Catarina","addressCountry":{"@type":"Country","name":"BR"}}},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":"225"},"mainEntityofPage":{"@type":"ItemPage","@id":"https:\/\/www.example.com\/p\/XDFASDFSAD\/"},"description":"225 Me gusta, 1 comentarios - Lu\u00eds (@luasdf) en Example: &quot;011 de 366\nMagali \ud83c\udf49 \n#magali #TurmadaMonica #illustration #ilustra\u00e7\u00e3o #art #drawing.&quot;","name":"Lu\u00eds en example: \u201c011 de 366\nMagali \ud83c\udf49 \n#magali #TurmadaMonica #illustration #ilustra\u00e7\u00e3o #art #drawing.\u201d"}
        </script>


<link rel="alternate" href="https://www.example.com/p/B7MhI_XgtYm/" hreflang="x-default" />

MORE HTML

Я пытался собрать следующее регулярное выражение, но мне не удалось:

.w+(.*)+S\w*(uploadFinish)\w*

Спасибо.

Ответы [ 3 ]

1 голос
/ 14 января 2020

Независимо от того, просматриваете ли вы веб-страницы или нет, вы должны рассматривать JSON как JSON. Попытка интерпретировать JSON как текст с помощью RegEx всегда приведет к ошибке.

Вот пример получения нужной части JSON.

const jsonLdElement = document.querySelector("[type='application/ld+json']")
const jsonLd = JSON.parse(jsonLdElement.textContent)
console.log(jsonLd.uploadFinish)
console.log(jsonLd)
<script type="application/ld+json">
  {
    "@context": "http:\/\/schema.org",
    "@type": "ImageObject",
    "caption": "011 de 366\nMagali \ud83c\udf49 \n#magali #TurmadaMonica #illustration #ilustra\u00e7\u00e3o #art #drawing.",
    "representativeOfPage": "http:\/\/schema.org\/True",
    "uploadFinish": "2020-01-11T22:08:58",
    "author": {
      "@type": "Person",
      "alternateName": "@luis",
      "mainEntityofPage": {
        "@type": "ProfilePage",
        "@id": "https:\/\/www.example.com\/luis\/"
      }
    },
    "comment": [{
      "@type": "Comment",
      "text": "\ud83d\udc9e\ud83d\udc9e\ud83d\udc9e\ud83d\udc9e\ud83d\udc9e\ud83d\udc9e\ud83d\udc9e\ud83d\udc9e\ud83d\udc9e\ud83d\udc9e\ud83d\udc9e\ud83d\udc9e\ud83d\udc9e\ud83d\udc9e\ud83d\udc9e\ud83d\udc9e",
      "author": {
        "@type": "Person",
        "alternateName": "@katiagualtieri985",
        "mainEntityofPage": {
          "@type": "ProfilePage",
          "@id": "https:\/\/www.example.com\/katiagualtieri985\/"
        }
      }
    }],
    "commentCount": "1",
    "contentLocation": {
      "@type": "Place",
      "name": "Florian\u00f3polis, Santa Catarina",
      "mainEntityofPage": {
        "@type": "CollectionPage",
        "@id": "https:\/\/www.example.com\/explore\/locations\/213145014\/A-B-C-D\/"
      },
      "address": {
        "@type": "PostalAddress",
        "addressLocality": "Florian\u00f3polis, Santa Catarina",
        "addressCountry": {
          "@type": "Country",
          "name": "BR"
        }
      }
    },
    "interactionStatistic": {
      "@type": "InteractionCounter",
      "interactionType": {
        "@type": "LikeAction"
      },
      "userInteractionCount": "225"
    },
    "mainEntityofPage": {
      "@type": "ItemPage",
      "@id": "https:\/\/www.example.com\/p\/XDFASDFSAD\/"
    },
    "description": "225 Me gusta, 1 comentarios - Lu\u00eds (@luasdf) en Example: &quot;011 de 366\nMagali \ud83c\udf49 \n#magali #TurmadaMonica #illustration #ilustra\u00e7\u00e3o #art #drawing.&quot;",
    "name": "Lu\u00eds en example: \u201c011 de 366\nMagali \ud83c\udf49 \n#magali #TurmadaMonica #illustration #ilustra\u00e7\u00e3o #art #drawing.\u201d"
  }
</script>
0 голосов
/ 14 января 2020

Если вам действительно нужно извлечь его с помощью регулярного выражения, вы можете использовать позитивный вид сзади (?<=PATTERN). Он соответствует тексту, который следует за данным шаблоном, без самого шаблона.

В этом случае шаблон будет "uploadFinish":".

За положительным взглядом следует шаблон, который будет соответствовать все до первой кавычки, например [^"]*

Это позволит вам извлечь значение без кавычек.

Создание всего шаблона:

(?<="uploadFinish":")[^"]*
0 голосов
/ 14 января 2020

Если вы можете предположить, что значение всегда заключено в двойные кавычки, то простое выражение, подобное этому, даст вам необходимое значение:

html.match(/"uploadFinish":"(.*?)"/)

Здесь html - тело ответа. Группа (.*?) соответствует любым символам, но как можно меньше, поэтому она остановится, если встретится двойная кавычка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...