2014-09-03 6 views
0

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

Вот мой код регулярного выражения:

var text = "#hot#hot hot #hot #hot.hot #hót #hot_hot #hot, (#hot) #hot. hot"; 
text.replace(#([^\b#,() ]*)/g, '<a href="/$1">#$1</a>'); 

выход:

<a href="/hot">#hot</a><a href="/hot">#hot</a> hot <a href="/hot">#hot</a> <a href="/hot.hot">#hot.hot</a> <a href="/hót">#hót</a> <a href="/hot_hot">#hot_hot</a> <a href="/hot">#hot</a>, (<a href="/hot">#hot</a>) <a href="/hot.">#hot.</a> hot 

единственный вопрос #hot. должен linkify только #hot одновременно #hot.hot действует

+0

Я не уверен, что «\ b» внутри класса символов действительно что-то делает. Нет символа, который соответствует «\ b», поэтому все символы будут включены в «[^ \ b]». По крайней мере, он не обрабатывает такие вещи, как восклицательные знаки, если это было намерением. – Jens

ответ

3

Ваше регулярное выражение это хорошо, но вы должны добавить границу слова в конце:

#([^\b#,() ]*)\b 
       ^-------- Here 

Working demo

enter image description here

+0

Спасибо, '\ b' сделал трюк, если я использую это, мне также не нужно',() ', я могу просто использовать'/# ([^ \ b #] *) \ b/g' – krisrak

+0

@ krisrak great, рад помочь. Спасибо за тик –

0

Попробуйте вместо этого это регулярное выражение:

/#([^\W]+)/g 

\w соответствует только буквам, цифрам и символам подчеркивания. Таким образом, его противоположность, \W, соответствует всем, что есть не письмо, номер или знак подчеркивания. Поместите это \W в класс символов с отрицанием ([^\W]), и вы получите желаемый результат, который по-прежнему может соответствовать символам с акцентом.

 Смежные вопросы

  • Нет связанных вопросов^_^