Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.06.2012, 16:03
Профессор
Посмотреть профиль Найти все сообщения от Антон Крамолов
 
Регистрация: 11.04.2012
Сообщений: 255

Регулиряки негативный просмотр и прочее
Есть такой код:

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 Ссылка]

Чтобы не было конфликтов

Последний раз редактировалось Антон Крамолов, 05.06.2012 в 16:23.
Ответить с цитированием
  #2 (permalink)  
Старый 05.06.2012, 16:21
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

1. А почему он должен отображать его подчеркнутым?
2. Негативного просмотра в js нет
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #3 (permalink)  
Старый 05.06.2012, 16:34
Профессор
Посмотреть профиль Найти все сообщения от Антон Крамолов
 
Регистрация: 11.04.2012
Сообщений: 255

Сообщение от nerv_ Посмотреть сообщение
1. А почему он должен отображать его подчеркнутым?
2. Негативного просмотра в js нет
Я исправил,

*
test
*


/\*(.+)\*/gm

так тож не работает
Ответить с цитированием
  #4 (permalink)  
Старый 05.06.2012, 16:41
Профессор
Посмотреть профиль Найти все сообщения от Антон Крамолов
 
Регистрация: 11.04.2012
Сообщений: 255

http://gyazo.com/7949c51b778e5734fdd...png?1338899515
Ответить с цитированием
  #5 (permalink)  
Старый 05.06.2012, 16:58
Профессор
Посмотреть профиль Найти все сообщения от Антон Крамолов
 
Регистрация: 11.04.2012
Сообщений: 255

Точка по-прежнему - любой символ, кроме новой строки. В javascript нет флага, который устанавливает мультилайн-режим для точки. Для того, чтобы заматчить совсем что угодно - используйте [\s\S].
Ответить с цитированием
  #6 (permalink)  
Старый 05.06.2012, 17:00
Профессор
Посмотреть профиль Найти все сообщения от Антон Крамолов
 
Регистрация: 11.04.2012
Сообщений: 255

var replacements = {
    '<strong>$1</strong>': /\*\*([\s\S]+)\*\*/g,
    '<em>$1</em>': /\*([\s\S]+)\*/g,


http://gyazo.com/8866339c3a23a9f7994709c4c14a13b3
Ответить с цитированием
  #7 (permalink)  
Старый 05.06.2012, 17:54
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

#1:
Если вы используете /\*\*([\s\S]+)\*\*/g, то имейте ввиду, что этот квантификатор является жадным, и он пойдет до последней двойной звёздочки во входной строке. Чтобы выделить текст до ближайшей двойной звёздочки, нужно использовать или:
/\*\*([\s\S]+?)\*\*/g (ленивый квантификатор), или:
/\*\*([^*]+)\*\*/g если текст внутри не может содержать звёздочки.
#2:
Негативный просмотр пишется так: (?! ... ) Но я не совсем понял, как должна работать регулярка для ссылки с негативным просмотром.
Ответить с цитированием
  #8 (permalink)  
Старый 05.06.2012, 18:13
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Кажется, вы хотели использовать негативный просмотр назад. Однако в Javascript нет просмотров назад, ни негативных, ни позитивных, только вперёд.
Ответить с цитированием
  #9 (permalink)  
Старый 05.06.2012, 18:17
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Антон Крамолов,
Свормулируйте свою задачу без кодов, тогда скорее всего будет коллективное соревнование, а так - многобукв
Ответить с цитированием
  #10 (permalink)  
Старый 05.06.2012, 19:09
Профессор
Посмотреть профиль Найти все сообщения от Антон Крамолов
 
Регистрация: 11.04.2012
Сообщений: 255

Все просто:

[url name] -> <a href="url">name</a>
а если же в тексте встречается прсто ссылка с http:// начинающиеся мы ее тож делаем активной
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск