Javascript全字w

Javascript全字w,javascript,regex,replace,Javascript,Regex,Replace,我正在寻找一种方法来显示一段文字,并允许用户单击单个单词来突出显示它 我找到了一些代码,可以在每个单词周围加上一个空格。所有这些都很好,但是 当我有一些文本,比如说Soufflé,它不会把它当作一个单词 这是我正在使用的代码 var p = $('#storyText'); p.html(function(index, oldHtml) { return oldHtml.replace(/\b([\w+-éñó\u00F1\u00E9]+)\b/g, '< span class=

我正在寻找一种方法来显示一段文字,并允许用户单击单个单词来突出显示它

我找到了一些代码,可以在每个单词周围加上一个空格。所有这些都很好,但是

当我有一些文本,比如说Soufflé,它不会把它当作一个单词

这是我正在使用的代码

var p = $('#storyText');

p.html(function(index, oldHtml) {
    return oldHtml.replace(/\b([\w+-éñó\u00F1\u00E9]+)\b/g, '< span class="storyWord">$1< /span>');
})
var p=$(“#故事文本”);
p、 html(函数(索引,旧html){
返回oldHtml.replace(/\b([\w+-cfñó\u00F1\u00E9]+)\b/g,“$1”;
})
在单词的开头或结尾有重音之前,它似乎工作得很好。

问题是javascript RegExp中的单词字符被简单地定义为
[a-zA-z0-9.]
,因此
\b
匹配它们和重音字符之间的“边界”。直接匹配单词是一种改进:

$.fn.highlightWords = function(){
  return this.html(function(i, html){
    return html.replace(/([\w'+-éñó\u00F1\u00E9])+/g, function(m){
        return '<span>'+m+'</span>'
    })
  })
}

$('p').highlightWords()
$.fn.highlightWords=函数(){
返回this.html(函数(i,html){
返回html.replace(/([\w'+-cfñó\u00F1\u00E9])+/g,函数(m){
返回“+m+”
})
})
}
$('p').highlightWords()

演示:

也许可以回头看看你从哪里得到的正则表达式?真的,现在,如果这不是乞求“为我解决它”,我不知道什么是合格的。这是“挑战性”的东西。看看。这可能会有帮助,或者至少可以解释这个问题。基本上\b在unicode字符上并不像您所期望的那样工作。好吧,jared,很公平。在javascript中似乎没有任何易于处理的unicode正则表达式。这里有一个答案提到了一个jquery库,它可能会有所帮助: