Регулиряки негативный просмотр и прочее
Есть такой код:
var replacements = { '<strong>$1</strong>': /\*\*(.+)\*\*/g, '<em>$1</em>': /\*(.+)\*/g, '<a href="$1">$2</a>': /\[([^\s"]+) (\w+)\]/g, '<a href="$1">$1</a>': /(https?:\/\/(?:www\.)?\w+(\.\w+)*(?::\d+)?(?:\/[^\s]*)?)/g } window.addEventListener('load', function() { var body = ge('body'); body.onkeypress = body.onkeyup = function() { var v = val(this); v = stripTags(v); for (var x in replacements) { v = v.replace(replacements[x], x); } v = v.replace(/\r\n|\r|\n/g, '<br>'); val('preview', v); } }, false); Вводишь в текстовое поле *test* он в диве отображает test Вопрос #1: Почему * test * Не отображается наклонным? Ведь используется модификатор 'g' #2 Негативный просмотр // Если попытаться использовать вместо этого '<a href="$1">$1</a>': /(https?:\/\/(?:www\.)?\w+(\.\w+)*(?::\d+)?(?:\/[^\s]*)?)/g // Регулярку с негативным просмотром, то все отказывается работать /(?<!\[)(https?:\/\/(?:www\.)?\w+(\.\w+)*(?::\d+)?(?:\/[^\s]*)?)/g Как бы для ссылок [http://site.ru Ссылка] Чтобы не было конфликтов |
1. А почему он должен отображать его подчеркнутым?
2. Негативного просмотра в js нет |
Цитата:
* test * /\*(.+)\*/gm так тож не работает |
|
Точка по-прежнему - любой символ, кроме новой строки. В javascript нет флага, который устанавливает мультилайн-режим для точки. Для того, чтобы заматчить совсем что угодно - используйте [\s\S].
|
var replacements = { '<strong>$1</strong>': /\*\*([\s\S]+)\*\*/g, '<em>$1</em>': /\*([\s\S]+)\*/g, http://gyazo.com/8866339c3a23a9f7994709c4c14a13b3 |
#1:
Если вы используете /\*\*([\s\S]+)\*\*/g, то имейте ввиду, что этот квантификатор является жадным, и он пойдет до последней двойной звёздочки во входной строке. Чтобы выделить текст до ближайшей двойной звёздочки, нужно использовать или: /\*\*([\s\S]+?)\*\*/g (ленивый квантификатор), или: /\*\*([^*]+)\*\*/g если текст внутри не может содержать звёздочки. #2: Негативный просмотр пишется так: (?! ... ) Но я не совсем понял, как должна работать регулярка для ссылки с негативным просмотром. |
Кажется, вы хотели использовать негативный просмотр назад. Однако в Javascript нет просмотров назад, ни негативных, ни позитивных, только вперёд.
|
Антон Крамолов,
Свормулируйте свою задачу без кодов, тогда скорее всего будет коллективное соревнование, а так - многобукв |
Все просто:
[url name] -> <a href="url">name</a> а если же в тексте встречается прсто ссылка с http:// начинающиеся мы ее тож делаем активной |
Часовой пояс GMT +3, время: 04:05. |