You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 19:54:57