JavaScript中编写regex实现(x 任意内容)格式字符串替换并追加文本
代码问题修正方案
原有代码的3个核心错误
- 正则字面量(
/.../格式)无法解析变量拼接,你写的/\('+StartingLetter +'*?\)/里的+StartingLetter +会被识别为普通字符串,不会代入变量值,动态正则需要用RegExp构造函数生成 - 匹配规则错误,原有正则只能匹配
(x)、(xx)这类格式,无法匹配括号内x后的其他内容 - 第一步处理得到
BlankText后,后续替换依然基于原始的oldText操作,第一步处理结果完全没有生效
修正后的完整代码
var StartingLetter = 'x'; var NewText = 'Dadidu'; // 第一步动态生成匹配( x 任意内容 )的正则 var blankRegex = new RegExp(`\\(${StartingLetter}[^)]*\\)`, 'g'); // 第二步匹配(x)的正则,避免误替换文本其他位置的独立x字符 var regexTest = new RegExp(`\\(${StartingLetter}\\)`, 'g'); $('.select_list option').text(function(i, oldText) { // 先把(x 任意内容)替换成(x) var BlankText = oldText.replace(blankRegex, `(${StartingLetter})`); // 基于处理后的BlankText做第二次替换 return BlankText.replace(regexTest, `(${StartingLetter} ${NewText})`); });
更简化的写法(无需两步替换)
直接一步匹配目标格式替换即可,逻辑更简洁:
var StartingLetter = 'x'; var NewText = 'Dadidu'; var replaceRegex = new RegExp(`\\((${StartingLetter})[^)]*\\)`, 'g'); $('.select_list option').text(function(i, oldText) { return oldText.replace(replaceRegex, `($1 ${NewText})`); });
内容的提问来源于stack exchange,提问作者logobi
相关产品推荐
相关产品推荐

