javascript – 正则表达式和字符串替换中的难以捉摸的错误
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 正则表达式和字符串替换中的难以捉摸的错误,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1798字,纯文字阅读大概需要3分钟。
内容图文
![javascript – 正则表达式和字符串替换中的难以捉摸的错误](/upload/InfoBanner/zyjiaocheng/722/ac28fdd736d54587aaf5d412c9d913e5.jpg)
我为一个页面编写了一个简单的javascript搜索器,并且遇到了一些错配/错误匹配以及可能很差的css类匹配的问题.
如果我点击第一个示例’代码'(过滤到一个元素),然后在’样式’链接上,’代码’高光照仍然存在.不用说这是不可取的.
我认为问题会发生在代码的过滤部分,但这对我来说都很好看.特别是因为我抓住标题的文本而不是它的HTML,然后添加一个新的跨度.
function filter(searchTerm) {
var searchPattern = new RegExp('(' + searchTerm + ')', 'ig'); // The brackets add a capture group
entries.fadeOut(150, function () {
noResults.hide();
$('header', this).each(function () {
$(this).parent().hide();
// Clear results of previous search
$('li', this).removeClass('searchMatchTag');
// Check the title
$('h1', this).each(function () {
var textToCheck = $('a', this).text();
if (textToCheck.match(searchPattern)) {
textToCheck = textToCheck.replace(searchPattern, '<span class="searchMatchTitle">$1</span>'); //capture group ($1) used so that the replacement matches the case and you don't get weird capitolisations
$('a', this).html(textToCheck);
$(this).closest('.workshopentry').show();
}
});
// Check the tags
$('li', this).each(function () {
if ($(this).text().match(searchPattern)) {
$(this).addClass('searchMatchTag');
$(this).closest('.workshopentry').show();
}
});
});
if ($('.workshopentry[style*="block"]').length === 0) {
noResults.show();
}
entries.fadeIn(150);
});
}
一些其他组合使这种情况发生,但其他一些组合没有,使我很难找到这个特定问题的原因.
解决方法:
如果没有正确引用,您无法信任正则表达式的用户输入.考虑使用这样的引用函数:
var rePattern = searchTerm.replace(/[.?*+^$\[\]\\(){}|]/g, "\\$&"),
searchPattern = new RegExp('(' + rePattern + ')', 'ig'); // The brackets add a capture group
编辑
正如评论中所提到的,为什么捕获括号被用于执行搜索尚不清楚;你可以使用$&作为替代模式.当然,我会理解你是否简化了这篇文章的正则表达式:)
内容总结
以上是互联网集市为您收集整理的javascript – 正则表达式和字符串替换中的难以捉摸的错误全部内容,希望文章能够帮你解决javascript – 正则表达式和字符串替换中的难以捉摸的错误所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。