Соответствие последнего слова из строки, разделенной точкой, с помощью регулярного выражения - PullRequest
3 голосов
/ 09 апреля 2020

Предположим, у меня есть JSON строк вроде этого:

[
  {
    "key1": "value",
    "key2": {
      "word1.word2.word3.word4.interestingPart": {
        "key1": "value",
        "key2": "value"
      }
    },
    "key3": "value"
  },
  {
    "key1": "value",
    "key2": {
      "word1.word2.word3.word4.word5.word6.thisIsAlsoAnInterestingPart": {
        "key1": "value",
        "key2": "value"
      }
    },
    "key3": "value"
  }
]

Как использовать регулярное выражение для сопоставления с этой последней "интересной частью" в ключе? Я могу ожидать, что ключ всегда начинается одинаково (word1, word2, word3, word4). Тем не менее, может быть что-то, что я не хочу включать в совпадение, которое отличается от файла к файлу (word5, word6).

Это то, что я до сих пор придумал:

.+(\..+)+(?=")

https://regex101.com/r/BjOcfl/1

Соответствует последней части, но также включает один предшествующий период. Я бы хотел, чтобы оно совпадало только со словом, без чего-либо еще.

ОБНОВЛЕНИЕ: Я использовал Python правила регулярных выражений, которые, очевидно, не работают в моем случае. Используя Python, мое регулярное выражение сопоставляет последнюю часть с одним дополнительным периодом, но с правилами JavaScript оно соответствует всему ключу.

https://regex101.com/r/0VRhl5/2

1 Ответ

0 голосов
/ 09 апреля 2020

Если вы не можете использовать синтаксический анализатор, вы можете сопоставить " с последующим сопоставлением с любым символом, кроме " или символом пробела, используя отрицательный класс символов

Затем разрешите шаблон возвращается к последней точке и захватывает последнюю часть в группе до первого появления "

"[^\s"]+\.([^"\s]+)":\s*{

Regex demo

Соответствие другого параметра только символы слова и повторение, совпадающее с точкой, за которой следуют слова 1 или более раз в группе без захвата "\w+(?:\.\w+)+

"\w+(?:\.\w+)+\.(\w+)":\s*{

Regex demo

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