Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 不以序列开头和结尾的字符串的正则表达式_Javascript_Jquery_Regex - Fatal编程技术网

Javascript 不以序列开头和结尾的字符串的正则表达式

Javascript 不以序列开头和结尾的字符串的正则表达式,javascript,jquery,regex,Javascript,Jquery,Regex,我需要突出显示数据,如果它包含任何搜索元素。如果数据是foo@bar.com如果搜索包含foo,函数将返回foo@bar.com. 问题是,如果搜索数组包含foo,a,则函数返回foo@bar.com这会破坏页面的视图 我的想法是我必须跳过任何已经被标签包围的东西。我该怎么做呢?这是一个典型的例子,说明了为什么不混合使用HTML和正则表达式 你有一个DOM,使用它 首先,使用正则表达式查找匹配的位置。这可以通过调用regex.execstring,然后获取regex.lastIndex来实现。

我需要突出显示数据,如果它包含任何搜索元素。如果数据是foo@bar.com如果搜索包含foo,函数将返回foo@bar.com.

问题是,如果搜索数组包含foo,a,则函数返回foo@bar.com这会破坏页面的视图


我的想法是我必须跳过任何已经被标签包围的东西。我该怎么做呢?

这是一个典型的例子,说明了为什么不混合使用HTML和正则表达式

你有一个DOM,使用它

首先,使用正则表达式查找匹配的位置。这可以通过调用regex.execstring,然后获取regex.lastIndex来实现。这将告诉您正则表达式搜索到的位置。使用该lastIndex调用textNode.splitText,然后再次减去匹配的长度。这将把匹配的文本与其余文本分开。然后可以将其包装到元素中

对所有文本节点和所有搜索重复此操作


我将把确切的代码留给您作为练习,但这将非常、非常可靠。

您是否可以在另一个对象中构建最终字符串,并在最后将所有内容连接在一起,而不是在适当的位置修改数据字符串并连续添加标记值?这样你就可以避免在替换的修改上进行匹配。这是一个有用的想法!你能帮我怎么做吗…?为什么要自己做饭?有时去餐馆@我的食物更健康,对我的身体更有益。谢谢你宝贵的建议!但是,如果我的数据是foo@bar.comfoo和搜索词是foo,bar?请让我知道细节:你能给我确切的解决方案吗@NietBecause我很无聊:试着理解它是如何工作的;用O,FO来搜索,它不会显示预期的结果:@ NIEETT精确地显示了我所期望的结果,但是如果你想避免这个问题,考虑添加词条。就在函数的开头。这将使它首先处理更长的搜索词。
 filter('highlight', function() {
 return function(data, search) {
     if (data) {
        data = data.toString();
        if (search) {
             for(var i = 0; i < search.length; i++) {
                data = data.replace( new RegExp( "(" + preg_quote( search[i] ) + ")" , 'gi' ), "<span class='search-highlight'>$1</span>" );
             }
        }
     }
     return data;
 };}).