Замена Javascript: не разделяйте слово на дефис (регулярные выражения)

#javascript #regex

#javascript #регулярное выражение

Вопрос:

Я использую a replace , чтобы обернуть все слова в строку с <a/> тегами, но если слово содержит тире или дефис, оно разбивает слово, например: hello-there становится hello - <a>there</a> .

Это то, что я использую сейчас:

 string.replace(/b(w )b/g, '<a href="javascript:void(0)">$1</a>');
  

Кроме того, как я могу удалить точки или запятые из слов?

Ответ №1:

w в регулярных выражениях не используются тире ( - ), поэтому ваше соответствие явно исключит их из вашего переноса слов. Другими словами, учитывая

 hello-there
  

ваше регулярное выражение увидит:

 word(hello) non-word(-)  word(there)
  

Попробуйте это:

 replace(/b([w-]) b/, ...)
  

явно включать тире в класс «это часть слова».

Комментарии:

1. Обратите внимание на «слова-буквы».replace(/b([w-] )b/g, «) //возвращает «» «слова-«.replace(/b([w-] )b/g, «) // возвращает «-» потому что символ перед тире — это буква.

Ответ №2:

 <script type="text/javascript">

var str="hello-there";

document.write(str.replace(/b([w -] )b/g,'<a href="javascript:void(0)">$1</a>')
);

</script>
  

Комментарии:

1. Примечание: внутри символьного класса будет соответствовать буквальному символу — он не действует как квантор.