如何用JS将textarea中引号包裹的内容替换为等长X实现文本审查
解决方案
现有代码的HTML、CSS部分不需要调整,只需要修改JS逻辑即可。之前修改时报JS错误基本都是正则中双引号未正确处理导致的语法异常,下面给出的代码已经规避该问题,同时实现两个核心效果:一是保留原有预设关键词屏蔽能力,二是自动将所有双引号包裹的文本替换为等长X,引号本身保留、引号内空格原样保留,和你给出的示例效果完全一致。
修改后可直接使用的JS代码
替换原main.js的全部内容即可:
const submitBtn = document.getElementById('formSub'); function censorWords(event) { event.preventDefault(); const textInput = document.getElementById('input'); // 自定义需要额外屏蔽的关键词列表 const blockKeywords = ["red"]; textInput.value = getCensoredText(textInput.value, blockKeywords); } function getCensoredText(originText, filters) { // 优先处理双引号包裹的内容 let censoredText = originText.replace(/"([^"]*)"/g, (match, innerContent) => { let replacedContent = ''; for (let i = 0; i < innerContent.length; i++) { // 引号内空格保留,其余字符替换为X replacedContent += innerContent[i] === ' ' ? ' ' : 'X'; } return `"${replacedContent}"`; }) // 执行关键词屏蔽,不需要该功能可以直接删掉这部分代码 if (filters.length) { const keywordReg = new RegExp(filters.join("|"), "gi"); censoredText = censoredText.replace(keywordReg, (match) => { return 'X'.repeat(match.length); }) } return censoredText; } submitBtn.addEventListener('click', censorWords)
效果测试
- 输入
The dog is "red",输出:The dog is "XXX" - 输入
The dog is "quite big",输出:The dog is "XXXXX XXX" - 引号外出现列表内的关键词(比如red),也会自动替换为等长X
如果不需要保留引号内的空格,把循环里的空格判断删除,所有字符统一替换为X即可;如果需要适配中文引号“”,只需要在正则规则里补充对应引号的匹配逻辑即可。
内容的提问来源于stack exchange,提问作者user15769770
相关产品推荐
相关产品推荐

