javascript тегов регулярных выражений с полным веб-адресом (анализ текста, обратное соответствие) - PullRequest
2 голосов
/ 04 августа 2020

У меня проблема с обратным соответствием javascript регулярному выражению.

Пример текста:

Непонятный текст с яблоком, апельсином и другими фруктами: https://www.address_nr1.com / watch ? v = dQw4w9WgXcQ. Другой фрагмент текста www.address_nr2.pl; Последнее предложение со специальными символами! @ # $% ^ & * ().

Мое регулярное выражение:

/(www|http:|https:)+[^\s]+[\w]|[A-Z0-9]+/gmi

Я хочу получить обратное соответствие это регулярное выражение. Если я добавлю ^ во вторую часть регулярного выражения (www|http:|https:)+[^\s]+[\w]|[^A-Z0-9]+, я могу правильно инвертировать все без веб-адреса. Как я могу инвертировать веб-адрес в этой ситуации?

«В конце» я буду использовать сценарий Google (var keywords = text.split(regex)) для pu sh всех ключевых миров и веб-адресов в массиве.

РЕДАКТИРОВАТЬ: I добавлены флаги регулярных выражений.

РЕШЕНИЕ: Спасибо, Рышард Чешский. «Скорее совпадать, не разделять». работает отлично.

var keywords = text.matchAll (/ (?: www|https?: //) \ S * \ b | [\ p {L} 0-9] + / gu); ключевые слова = Array.from (keywords, x => x [0]);

Я изменил AZ на \ p {L}, чтобы захватывать буквы Poli sh, и добавил флаг «u», потому что это необходимо с \ p {L}.

1 Ответ

2 голосов
/ 04 августа 2020

Скорее соответствует , не разделять .

/(?:www|https?:\/\/)\S*\b/g

См. доказательство

ПОЯСНЕНИЕ

NODE                     EXPLANATION
--------------------------------------------------------------------------------
  (?:                      group, but do not capture:
--------------------------------------------------------------------------------
    www                      'www'
--------------------------------------------------------------------------------
   |                        OR
--------------------------------------------------------------------------------
    http                     'http'
--------------------------------------------------------------------------------
    s?                       's' (optional (matching the most amount
                             possible))
--------------------------------------------------------------------------------
    ://                      '://'
--------------------------------------------------------------------------------
  )                        end of grouping
--------------------------------------------------------------------------------
  \S*                      non-whitespace (all but \n, \r, \t, \f,
                           and " ") (0 or more times (matching the
                           most amount possible))
--------------------------------------------------------------------------------
  \b                       the boundary between a word char (\w) and
                           something that is not a word char

JavaScript:

const string = "Some awsome text with apple, orange and other fruits:https://www.address_nr1.com/watch?v=dQw4w9WgXcQ. Another piece of text www.address_nr2.pl; Last sentence with special characters !@#$%^&*().";
const results = string.matchAll(/(?:www|https?:\/\/)\S*\b/g);
console.log(Array.from(results, x => x[0]));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...