Периоды захвата, но не внутри ссылок - PullRequest
2 голосов
/ 01 октября 2019

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

Это самое близкое, что я получил:

(?!(\b[\w]+:\/\/.*?))\B\w+\.

В этом фрагменте Here is some sample text with a URL: http://stackoverflow.com. I would prefer to select periods outside of URLs though. происходят следующие захваты:

  • tackoverflow.
  • om.
  • hough.

Я просто хочу точку после URL и последний в предложении. Я использую JavaScript, поэтому у меня нет доступа к негативным взглядам (что кажется очень полезным, но, может быть, мы их когда-нибудь получим).

Ответы [ 2 ]

2 голосов
/ 01 октября 2019

Вы должны быть в состоянии использовать положительный прогноз, чтобы утверждать, что пробел или EOL следует после вашего периода.

\.(?=\s|$)

См. Это в Regex101

  • \. Соответствует буквальному периоду
  • (?=...) - положительный прогноз, который будет утверждать, что пробел \s или EOL $ идет после вашего периода. Это никогда не будет иметь место в URL-адресе, поэтому он работает.

Если вы хотите быть менее строгим, вы можете заменить свое предпросмотр любым не алфавитно-цифровым символом вместо пробела. Вот альтернатива:

/\.(?=[^a-z0-9]|$)/igm

См. Это на Regex101

0 голосов
/ 01 октября 2019

Вы можете использовать следующее выражение: ([\w]+:\/\/[^\s]+)([\.](?=\s|$))

Пример оформления URL минус периоды в качестве гиперссылки на уценку:

const expression = /([\w]+:\/\/[^\s]+)([\.](?=\s|$))/g;

const input = `http://stackoverflow.com.
In this snippet Here is some sample text with a URL: http://stackoverflow.com. I would prefer to select periods outside of URLs though.
http://stackoverflow.com`;

const output = input.replace(expression, (match, url, period) => `[${url}](${url})${period}`);

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