Как определить границу слова с помощью таких символов, как #:.[ в регулярном выражении на javascript

Я хочу найти это слово: '#foo'

в этой строке:

first foo second #foo

так что соответствует только последний '#foo' (с '#')

Я использую этот код, и он вызывает две ошибки:

var mySearch ='#foo'
var regexp = new RegExp('\\b' + mySearch + '\\b', 'g');
  1. поиск mySearch = 'foo' приведет к совпадению с обоими "foo" (неправильно! - должно совпадать только с первым)
  2. поиск mySearch = '#foo' вообще не приведет к совпадению (неверно - должно совпадать со вторым)

как правильно написать?


person Alon    schedule 23.02.2012    source источник


Ответы (2)


Пытаться:

var regexp = new RegExp('\b' + mySearch + '\b', 'g');
person codaddict    schedule 23.02.2012
comment
это не сработает (я уже пробовал). при этом вывод самого регулярного выражения не такой, как мы хотим, чтобы он выглядел так '/\b#foo\b\/', а что-то странное со странными символами (я не могу скопировать и вставить это здесь). в любом случае - это регулярное выражение '/\b#foo\b\/' по-прежнему будет вызывать проблему, которую я указал в своем вопросе - person Alon; 23.02.2012

\b в регулярном выражении - это граница слова. Он не сможет соответствовать границе между пространством and a pound #.

Так что ваш regexp должен быть просто

var regexp = new RegExp(mySearch + '\\b', 'g');
person Ade YU    schedule 23.02.2012
comment
спасибо, но это половина решения, так как если я буду искать foo, он будет соответствовать foo в #foo, а я этого не хочу... - person Alon; 23.02.2012
comment
@Alon Если вы хотите сопоставить foo без #foo, шаблон должен быть (^|[^#])foo, что означает, что foo не должно следовать за #. - person Ade YU; 23.02.2012