GTM自定义JavaScript变量正则test()检测返回false如何解决
问题根因
代码始终返回false的核心错误是直接将document.bodyDOM元素对象传入正则test()方法做匹配:正则执行时会把DOM对象转为默认字符串[object HTMLBodyElement],完全不会读取body的类名、内部内容,自然无法匹配到目标关键词。另外原代码存在多余的嵌套大括号,属于无意义的语法冗余。
可用修复代码
根据你给出的场景(匹配body类名中的stellar关键词),直接读取body的className属性做匹配即可:
function(){ var bodyClassStr = document.body.className; return /stellar/.test(bodyClassStr); }
不同场景的方案选择
- 如果你的需求是检测body的class类名中是否含目标词:直接用上面的代码即可,性能最优。如果需要避免误匹配
interstellar这类包含stellar字符片段的无关词汇,可以把正则替换为/\bstellar\b/,通过单词边界做更精准的匹配。 - 如果你的需求是检测页面渲染后,body内展示的可见文本是否含目标词:把取值换成
document.body.innerText即可。 - 如果你的需求是检测body内所有HTML源码(包含标签属性、注释、隐藏元素内容)是否含目标词:把取值换成
document.body.innerHTML即可,注意页面内容较多时该方式性能稍差。
更优实现(针对类名检测场景)
如果后续你需要精确匹配某个完整类名,不需要模糊匹配关键词,可以直接用浏览器原生的classListAPI,不需要写正则,逻辑更稳定:
function(){ // 示例:精确判断body是否存在template-stellar-project这个类 return document.body.classList.contains('template-stellar-project'); }
内容的提问来源于stack exchange,提问作者rachelb1066
相关产品推荐
相关产品推荐

