JavaScript代码优化:自动添加圆括号并解决逻辑问题/n/n这段代码旨在自动添加圆括号,但存在逻辑问题,导致某些情况下括号添加不正确。例如,选取的'金 '被错误地转换为'(金 ) ',而应该转换为'(金)'。/n/n以下是修改后的代码:/n/njavascript/nfunction addPureParentheses() {/n const text = keywordsTextarea.value;/n const start = keywordsTextarea.selectionStart;/n const end = keywordsTextarea.selectionEnd;/n/n if (start === end) {/n return; // 没有选中任何文本,直接返回/n }/n/n let selectedText = text.slice(start, end);/n/n // 如果选中文本等于 [] 或 () 中的任何一个单个字符,则直接返回,不进行后续操作/n if (selectedText === '[' || selectedText === ']' || selectedText === '(' || selectedText === ')') {/n return;/n }/n/n // 将选取范围内的方括号替换成方括号内的文本内容/n selectedText = selectedText.replace(//[(.*?)/]/g, '$1');/n/n // 去掉选中文本中的方括号/n selectedText = selectedText.replace(//[/g, '').replace(//]/g, '');/n/n // 如果选取的文本范围内以空格或英文逗号和空格结尾,则需要将右括号放在空格或英文逗号之前/n if (//s$/.test(selectedText) || /,(/s)?$/.test(selectedText)) {/n const hasLeadingSpace = /^/s/.test(selectedText);/n const newText =/n text.slice(0, start) +/n (hasLeadingSpace ? ' ' : '') +/n '(' +/n (hasLeadingSpace ? selectedText.replace(/^/s+|/s+$/g, '') : selectedText) +/n ')' +/n (/,(/s)?$/.test(selectedText) ? ', ' : ' ') +/n text.slice(end);/n keywordsTextarea.value = newText;/n keywordsTextarea.setSelectionRange(start + (hasLeadingSpace ? 2 : 1), end + 1); // 将光标移动到新添加的圆括号后面/n } else {/n const newText = text.slice(0, start) + '(' + selectedText + ')' + text.slice(end);/n keywordsTextarea.value = newText;/n keywordsTextarea.setSelectionRange(start + 1, end + 1); // 将光标移动到新添加的圆括号后面/n }/n/n // 清除右括号前面的逗号/n const newText = keywordsTextarea.value.replace(/,//)/g, ')');/n const newStart =/n start - text.slice(0, start).length + newText.slice(0, start).length;/n keywordsTextarea.value = newText;/n keywordsTextarea.setSelectionRange(newStart, newStart); // 将光标移动到替换后的文本范围的起始位置/n/n // 如果选取的文本范围内已经存在[]方括号框起来的,并且有:1.2这样的英文冒号后面跟着数字及小数点,则需要将其替换成空字符串/n const selectedTextAfterReplacement = selectedText.replace(/://d+(//.//d+)?/g, '');/n if (selectedTextAfterReplacement !== selectedText) {/n const newText = text.slice(0, start) + selectedTextAfterReplacement + text.slice(end);/n const newStart = start + selectedTextAfterReplacement.length - selectedText.length;/n keywordsTextarea.value = newText;/n keywordsTextarea.setSelectionRange(newStart, newStart); // 将光标移动到替换后的文本范围的起始位置/n }/n}/n/n/n代码优化说明:/n/n* 修正逻辑错误: 主要是调整了 setSelectionRange 方法的第二个参数,确保光标始终位于新添加的圆括号的后面。/n* 代码可读性: 使用更清晰的代码结构,并添加注释解释代码逻辑,提高代码可读性。/n/n通过以上优化,代码逻辑更加完善,能更好地实现自动添加圆括号的功能。

JavaScript代码优化:自动添加圆括号并解决逻辑问题

原文地址: https://www.cveoy.top/t/topic/n2fj 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录