Открытие захвата, но не закрывающий тег - PullRequest
2 голосов
/ 15 февраля 2020

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

(?<tag>.)(?: href="(?<url>.+?)")?>(?<text>.+?)<

это работает, но я хочу, чтобы «тег» был пустым в сегментах, которые не обернуты в тег, однако с текущим регистром, он захватывает закрывающий тег предыдущего сегмента ...: (*

Активный пример: https://regex101.com/r/UEZAaw/3/

Набор результатов I хотел бы получить, обратите внимание, что пункты 2 и 4 должны иметь null для тега:

{
   "0":{
      match: "p>The <",
      tag: "p",
      url: null,
      text: "The "
   },
   "1":[
      match: "a href=\"https://www.legislation.gov.uk/ukpga/2010/23/contents\">UK Bribery Act<",
      tag: "a",
      url: "https://www.legislation.gov.uk/ukpga/2010/23/contents",
      text: "UK Bribery Act"
   ],
   "2":[
      match: "/a> (“the Act”) received Royal Assent in April 2010 and came into ... <",
      tag: null
      url: null,
      text: " (“the Act”) received Royal Assent in April 2010 and came into ... "
   ],
   "3":[
      match: "a href=\"http://www.oecd.org/daf/anti-bribery/ConvCombatBribery_ENG.pdf\">OECD anti-bribery Convention<",
      tag: "a",
      url: "http://www.oecd.org/daf/anti-bribery/ConvCombatBribery_ENG.pdf",
      text: "OECD anti-bribery Convention"
   ],
   "4":[
      match: "/a>. The Act outlined four prime offences, including the introduction ... <",
      tag: null,
      url: null,
      text: ". The Act outlined four prime offences, including the introduction ... "
   ],
   "5":[
      match: "b>rest is history<",
      tag: "b",
      url: null,
      text: "rest is history"
   ]
   ...
}

Потратил несколько хороших часов, не разобрался, буду очень признателен за ваши предложения.

1 Ответ

2 голосов
/ 15 февраля 2020

Я думаю, что это работает, основываясь на том, что я вижу в поле ИНФОРМАЦИЯ О МАТЧЕ на regex101 :

/(?:(?<tag>(?<!\/).)|(?:\/.))(?: href="(?<url>.+?)")?>(?<text>.+?)</gm
...