我正在使用免费的Javascript来搜索和突出显示网站上的文字。 如果search-stirng是单词的一部分,则应突出显示单词。 示例:搜索“over”,而不是“stackoverflow”必须突出显示。
所以第一步是使用正则表达式搜索文本以选择整个单词的开头,并返回起始位置:
var string='over'; //String to search
var pattern= new RegExp("[a-zA-Záéíóäëiöúàèììùüß-]*"+string,'i');
var position = node.data.toUpperCase().search(pattern);
接下来是调用高亮功能......
if (position >= 0)
return highlight(node, position, string);
else
return 0;
...使用起始位置并检测单词的最后一个字符(endbit)
function highlight(node, position, string){
var middlebit = node.splitText(position);
var endbit = middlebit.splitText(middlebit.data.search(/[^a-zA-Záéíóäëiöúàèììùüß-]/));
[...] next: highlight the word...
只要你不使用变异的元音,变形金刚等,那就好了。 例如:如果搜索结束,则突出显示整个单词“stackoverflow”。 如果你搜索“würstchen”(例如在bratwürstchen)它不起作用。 它看起来像那样
var position = node.data.toUpperCase().search(pattern);
或
var middlebit = node.splitText(position);
不适用于那种特殊字符。
希望任何人都知道如何解决这个问题。
非常感谢你,
Bndr
答案 0 :(得分:1)
为了回答我自己的问题: 经过2天的“尝试和错误”并最终写下这个问题后,我发现这条线上缺少“我”:
var endbit = middlebit.splitText(middlebit.data.search(/[^a-zA-Záéíóäëiöúàèììùüß-]/));
找到endbit有一个错误的表达式。 所以正确的是:
var endbit = middlebit.splitText(middlebit.data.search(/[^a-zA-Záéíóäëiöúàèììùüß-]/i));
小事,影响大; - )