Регулярное выражение Javascript: найти слово НЕ, за которым следует пробел - PullRequest
3 голосов
/ 21 декабря 2011

Мне нужно регулярное выражение javascript, которое будет соответствовать словам, за которыми НЕ следуют пробел и которые имеют символ @ раньше, например:

@ bug - находит "@bug", потому что пробел после него

@ bug и me - ничего не находит, потому что после "@bug" есть место

@ bug и @another - находит только "@another"

@ bug и @another и что-то -ничего не находит, потому что за обоими словами следует пробел.

Помощь?Добавлено: строка извлекается из, и FF ставит свои собственные теги в конце.Хотя мне нужно только последнее слово, начинающееся с @, $ (конец строки) использовать нельзя.

Ответы [ 2 ]

12 голосов
/ 21 декабря 2011

Попробуйте re = /@\w+\b(?! )/. Это ищет слово (убедившись, что оно захватывает все слово) и использует отрицательный взгляд, чтобы убедиться, что за словом не следует пробел.

Использование настройки выше:

var re = /@\w+\b(?! )/, // etc etc

for ( var i=0; i<cases.length; i++ ) {
    print( re2.exec(cases[i]) )
}

//prints
@bug
null
@another
null

Единственный способ, которым это не сработает, - это если ваше слово оканчивается подчеркиванием и вы хотите, чтобы эта пунктуация была частью слова: например, @bug and @another_ blahblah 'выберет @another, поскольку @another не было пробела Это кажется маловероятным, но если вы хотите разобраться и с этим делом, вы можете использовать /@\w+\b(?![\w ]/, и это вернет null для @bug and @another_ и @bug_ для @another and @bug_.

5 голосов
/ 21 декабря 2011

Похоже, вы просто ищете слова в конце ввода:

/@\w+$/

Тесты:

var re = /@\w+$/,
    cases = ['@bug',
             '@bug and me',
             '@bug and @another',
             '@bug and @another and something'];

for (var i=0; i<cases.length; i++)
{
    console.log(cases[i], ':', re.test(cases[i]), re.exec(cases[i]));
}

// prints
@bug : true ["@bug"]
@bug and me : false null
@bug and @another : true ["@another"]
@bug and @another and something : false null
...