用于匹配文本的Javascript RegExp,而不是't是HTML标记的一部分
Javascript RegExp for matching text which isn't part of HTML tag
我试图找到一种方法来突出显示HTML中的一些文本。给出了以下HTML:
<div>This text contains matching words like word1 and word2 and xyzword1xyz and word2xyz and xyzword2</div>
应该用<span>
包围的单词列表是:
var array = ['word1','word2', 'word1word3'];
我当前的Javascript:
$.each(array , function(index, elem){
if(elem.length<3 || elem === "pan" || elem === "spa" || elem === "span")return true;
var re = new RegExp(""+elem+"(?=([^']*'[^']*')*[^']*$)","gi");
returnString = returnString.replace(re, "<span class='markedString colorword1orword2'>$&</span>");
});
得到的div看起来像:
<div>This text contains matching words like <span class='markedString colorword1orword2'>word1</span> and <span class='markedString colorword1orword2'>word2</span> and xyz<span class='markedString colorword1orword2'>word1</span>xyz and <span class='markedString colorword1orword2'>word2</span>xyz and xyz<span class='markedString colorword1orword2'>word2</span> and finally <span class='markedString colorword1orword2'><span class='markedString colorword1orword2'>word1</span>word3</span></div>
由于当前的regexp,class='markedString colorword1orword2'
中的所有内容都不匹配。
问题:如果阵列看起来像
var array = ['word1','word2', 'class'];
我最终会选择
<div>This text contains matching words like <span <span class='markedString colorword1orword2'>class</span>='markedString colorword1orword2'>word1</span> and <span <span class='markedString colorword1orword2'>class</span>='markedString colorword1orword2'>word2</span> and xyz<span <span class='markedString colorword1orword2'>class</span>='markedString colorword1orword2'>word1</span>xyz and <span <span class='markedString colorword1orword2'>class</span>='markedString colorword1orword2'>word2</span>xyz and xyz<span <span class='markedString colorword1orword2'>class</span>='markedString colorword1orword2'>word2</span> and finally <span <span class='markedString colorword1orword2'>class</span>='markedString colorword1orword2'><span <span class='markedString colorword1orword2'>class</span>='markedString colorword1orword2'>word1</span>word3</span></div>
这个例子是以某种方式构建的,所以HTML标签本身可能存在其他单词。
我需要一种模拟regexp查找的方法,这样我就可以制定一个规则,比如:
匹配不在
<span
和>
之间但允许级联的所有内容<span>adsa<span>asdsa</span></span>
等匹配
任何regexp大师都知道如何归档吗?
您可以尝试这样的操作(无循环):
var $div = $('#the_id_of_ the_div'),
array = ['word1','word2', 'word1word3'],
re = new RegExp(array.join('|'), 'gi'),
divHTML = $div.text().replace(re, "<span class='markedString colorword1orword2'>$&</span>");
$div.html(divHTML);
这只是一个例子,您可能会从文章片段外的某个jQuery对象中获得div
。
编辑
如果你在包装器中有一堆div
,你可以这样做:
var array = ['word1','word2', 'word1word3'],
re = new RegExp(array.join('|'), 'gi');
$('#wrapper div').each(function () {
var divHTML = $(this).text().replace(re, "<span class='markedString colorword1orword2'>$&</span>");
$(this).html(divHTML);
return;
});
jsFiddle的现场演示。
相关文章:
- Html地图对象-点击地图获取id的一部分
- 使文本仅滚动HTML页面的一部分
- 用HTML元素替换字符串的一部分
- 如何用jQuery替换HTML标签的一部分
- 只是 JQuery 可执行文件的一部分.当直接粘贴到HTML中时,一切正常(window.location)
- 通过Java加载XML并制作HTML DOM的一部分
- 复制和修改元素,以便在html文档的另一部分使用它们
- “data-”属性作为超链接的一部分.HTML 到 JavaScript
- Jquery 加载外部 HTML 的一部分
- 如何仅将字符串的一部分呈现为 HTML
- 如何在对象标记中仅加载 HTML 页面的一部分,而不是整个 HTML 文档
- 如何将 html 页面的一部分保存到客户端 (javascript) 或服务器端 asp.net 的图像或 pdf
- 如何使用 Javascript 或 JQuery 在 HTML 中突出显示输入文本字段的一部分
- 使索引.html路径的一部分
- 节点.js我做错了哪一部分?服务器.js正在运行,但我看不到 HTML 页面
- 仅使用 html 将网页的一部分插入到另一个网页中
- 使用 jQuery 获取 html 字符串的一部分
- 使用 XMLHttpRequest 获取网页,但只获取 html 的一部分
- 在 Javascript 中使用正则表达式替换 html 字符串的一部分
- 使用Ajax发布HTML页面的一部分