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

如何用正则表达式获取无嵌套三元运算符的字符串数组?

匹配无嵌套三元运算符的正则解决方案

针对无嵌套问号、仅含简单逻辑运算符的三元表达式,要将其拆分为条件部分、真值分支、假值分支三个部分,可以使用以下正则表达式:

^([^?]+?)\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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 22:22:36