Qualtrics中JavaScript正则表达式字符串变量丢失问题求助
Qualtrics中JS正则变量被清空的问题解决
问题根源
Qualtrics会对嵌入的JavaScript代码做预扫描解析:
- 若用双引号包裹包含变量插值(如
${xxx})的字符串,Qualtrics会将其识别为自身系统占位符(比如调取问卷字段的${e://Field/XXX}),找不到对应系统变量时就替换为空字符串。 - 局部作用域的变量可能被Qualtrics的沙箱机制过滤回收,导致后续调用时为空。
解决方案
1. 用单引号隔离自定义字符串
所有包含自定义变量或正则片段的字符串改用单引号包裹,避免触发Qualtrics的预解析逻辑:
// 错误:双引号会让Qualtrics解析${xxx} const SKIP_WORDS = "${no|not|never}"; // 正确:单引号隔离,Qualtrics不会解析内部内容 const SKIP_WORDS = 'no|not|never';
2. 用RegExp构造函数生成正则,避免字符串拼接
直接通过RegExp构造函数传入变量,绕过字符串插值的预解析问题:
// 定义目标短语数组 const OPINION_TERMS = ['I think', 'In my opinion', 'I believe']; // 生成跳过词正则 const skipRegex = new RegExp(`\\b(${SKIP_WORDS})\\b`, 'gi'); // 生成观点短语匹配正则 const opinionRegex = new RegExp(`\\b(${OPINION_TERMS.join('|')})\\b`, 'gi'); // 统计匹配次数 function countPhrases(response) { let count = 0; const cleaned = response.replace(skipRegex, ''); const matches = cleaned.match(opinionRegex); if (matches) count = matches.length; return count; }
3. 全局声明关键变量
将需要保留的变量挂载到window对象,避免被Qualtrics沙箱回收:
// 全局挂载,确保变量不被过滤 window.SKIP_WORDS = 'no|not|never'; window.OPINION_TERMS = ['I think', 'In my opinion', 'I believe']; function countPhrases(response) { const skipRegex = new RegExp(`\\b(${window.SKIP_WORDS})\\b`, 'gi'); // ... 其余逻辑 }
4. 强制禁用Qualtrics代码格式化(兜底方案)
在代码块开头添加专用注释,阻止Qualtrics对这段JS进行预解析:
/* QualtricsDisableAutoFormatting */ // 完整代码放在注释下方 const SKIP_WORDS = 'no|not|never'; // ...
验证方式
部署后打开问卷,按F12调出开发者工具,在控制台打印变量(如console.log(SKIP_WORDS)),确认变量值未被清空。
内容的提问来源于stack exchange,提问作者Ian Davis
相关产品推荐
相关产品推荐

