【发布时间】:2016-12-09 09:35:30
【问题描述】:
我正在为文档站点使用搜索功能,在选择搜索命中时会显示突出显示文本的页面(就像 pdf 阅读器或 netbeans 会做的那样)。
为了实现高光,我使用了 javascript:
function searchHighlight(searchTxt) {
var target = $('#page').html();
var re = new RegExp(searchTxt, 'gi');
target = target.replace(
re,
'<span class="high">' + searchTxt + '</span>'
);
$('#page').html(target);
}
问题/疑问:
由于页面包含基于 md5 文件名的图像,因此某些搜索会混淆图像 src。
搜索“1000”会扭曲
<img src="53451000abababababa---.jpg"
到
<img src="5334<span class="hl">1000</span>abababab--.jpg">
是否可以用正则表达式解决这个问题,以某种方式排除“.jpg”的任何内容?
或者有没有可能,在highligting之前用占位符替换图像,在replace之后恢复到src?
例子:
- 将所有 替换为 {{I-01}}、{{I-02}} 等,并将真正的 src 保存在 var 中。
- 执行上述替换。
- 从 {{I-01}} 恢复到
DOM 操作当然是一种选择,但我认为这可以通过正则表达式以某种方式完成,但是,我的正则表达式技能非常缺乏。
更新 这段代码现在对我有用:
function searchHighlight(searchTxt) {
var stack = new Array();
var stackPtr = 0;
var target = $('#page').html();
//pre
target = target.replace(/<img.+?>/gi,function(match) {
stack[stackPtr] = match;
return '{{im' + (stackPtr++) + '}}';
});
//replace
var re = new RegExp(searchTxt, 'gi');
target = target.replace(re,'<span class="high">' + searchTxt + '</span>');
//post
stackPtr = 0;
target = target.replace(/{{im.+?}}/gi,function(match) {
return stack[stackPtr++];
});
$('#page').html(target);
}
【问题讨论】:
-
也许你想办法解决这个问题,但你会遇到其他问题,因为你的方法不好。不要试图用正则表达式来理解 HTML。
-
@ankitbug94,我认为你没有抓住重点。
-
您能否在问题中包含
html的#page元素? -
searchTxt是用户输入吗? -
您对
searchTxt=img或>等的计划是什么,这将彻底破坏您的HTML
标签: javascript regex documentation