如何用正则表达式获取无嵌套三元运算符的字符串数组?
匹配无嵌套三元运算符的正则解决方案
针对无嵌套问号、仅含简单逻辑运算符的三元表达式,要将其拆分为条件部分、真值分支、假值分支三个部分,可以使用以下正则表达式:
^([^?]+?)\s*\?\s*((?:[^:'"]|['"][^'"]*['"])+?)\s*:\s*(.*)$
正则说明
^([^?]+?):匹配从字符串开头到第一个未被引号包裹的?的内容,作为三元表达式的条件部分(非贪婪匹配确保不会跳过第一个?)\s*\?\s*:匹配?符号及其前后可能存在的空白字符((?:[^:'"]|['"][^'"]*['"])+?):匹配真值分支,允许包含成对单/双引号内的内容(避免将引号内的:误判为分支分隔符),非贪婪匹配确保停在第一个未被引号包裹的:前\s*:\s*:匹配:符号及其前后可能存在的空白字符(.*)$:匹配剩余所有内容作为假值分支
代码示例(JavaScript)
const str = "!(a == b) && (c == d) ? value1 : 'value2'"; const regex = /^([^?]+?)\s*\?\s*((?:[^:'"]|['"][^'"]*['"])+?)\s*:\s*(.*)$/; const matchResult = str.match(regex); if (matchResult) { const result = matchResult.slice(1); console.log(result); // 输出:["!(a == b) && (c == d)", "value1", "'value2'"] }
注意事项
该正则适用于无嵌套三元运算符、引号无嵌套且成对闭合的简单场景;如果需要处理转义引号(比如'it\'s ok'),则需要对正则进行调整,添加转义字符的匹配逻辑。
内容的提问来源于stack exchange,提问作者Chair12
相关产品推荐
相关产品推荐

