我们使用此脚本来改变句子中的最后一个单词。
$div = $('.cPageHeader h2');
$div.html($div.text().replace(/(\w+?)$/, '<span class="cOrange">$1</span>'));
只要不涉及特殊字符,这种方法效果很好。
只要我们有像<h2>International fancy stüff</h2>
这样的标题,突出显示就会出错。只有ff会突出显示。如果我们在行(!-.?)
的末尾有一个字符,则会发生同样的错误。
有人可以更改脚本,以便突出显示最后一个字(包括附加的标点符号)和任何重音字符吗?
答案 0 :(得分:2)
我建议:
$div = $('.cPageHeader h2');
$div.html($div.text().replace(/(\S+?)$/, '<span class="cOrange">$1</span>'));
这基本上会查找字符串末尾的所有非空白字符,但如果你的字符串以结尾,则不会有突出显示(因此可能值得首先修剪字符串 ,只是为了确定。
以下内容复制了上述内容,但对尾随空格更加宽容:
var $div = $('#demo');
$div.html($div.text().replace(/\b(\S+?)(\b|(?:\s+))$/, '<span class="cOrange">$1</span>'));
匹配:
\b
:字边界; \S+
:一个或多个非空格字符的序列; (\b|(?:\s+))
:另一个字边界或一个或多个空白字符的序列。再次更新,因为原始表达式中的编号匹配($1
)显然已被弃用,或者很快就会被弃用(尽管我无法找到备份的引用特别的回忆,所以也许拿一小撮盐,并改为使用函数:
var $div = $('#demo');
$div.html($div.text().replace(/\b(\S+?)(\b|(?:\s+))$/, function(a){
return '<span class="cOrange">' + a + '</span>';
}));
参考文献:
答案 1 :(得分:1)
这应该是你所需要的:
$div.text().replace(/(\S+)$/, '<span class="cOrange">$1</span>')
您希望在匹配中包含尾随标点符号,因此\w+
永远不是正确的工具。通过这种方式,您无需处理将ü
等非ASCII字符视为单词字符。
仅供参考,使用像\S+?
这样不情愿的量词是没有意义的,因为你一直匹配到字符串的结尾。在这种情况下,这不是不正确的,只是毫无意义。