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

需求:仅当字符串包含全部4个指定单词时匹配的正则表达式

如何用正则(或更优方案)检查并返回全部指定关键词

嘿,我明白你的需求了——只有当字符串里同时包含Update、Rollback、Skip、Not Now这四个词(你的示例里其实是JSON的键)时,才返回这四个词,缺一个就啥都不返回对吧?

首先说你写的正则问题:(Update|Rollback|Skip|Not Now)这个表达式只会匹配任意一个存在的词,不管其他三个是否存在,完全达不到“四个都要有才返回”的要求。下面给你两种解决方案,一种是正则实现,另一种是更靠谱的非正则方案(你也提到正则可能不是最优选择)。

一、正则实现方案

要实现“必须同时存在四个词才匹配”,我们需要用到正向预查(Positive Lookahead),它能在不消耗字符的前提下,检查整个字符串里是否存在指定模式。

1. 验证四个词是否全部存在的正则

这个正则用来判断字符串是否满足“四个词都存在”的条件:

^(?=.*Update)(?=.*Rollback)(?=.*Skip)(?=.*Not Now).*$
  • ^ 和 $ 匹配字符串的开头和结尾,确保检查覆盖整个字符串
  • (?=.*Update):检查字符串任意位置存在Update
  • 另外三个预查同理,分别验证Rollback、Skip、Not Now的存在
  • 只有四个预查全部通过,整个正则才会匹配成功

2. 提取目标词

当上面的正则验证通过后,再用全局匹配提取所有目标词:

Update|Rollback|Skip|Not Now

加上全局标志(比如JavaScript里的g,Python里的re.findall)就能得到包含四个词的数组。

示例(JavaScript):

const str1 = '{"Update":"iVBORw0KGgo","Rollback":"iVBORw0KGgo","Skip":"iVBORw0KGgo","Not Now":"iVBORw0KGgo"}';
const str2 = '{"Update":"iVBORw0KGgo","Skip":"iVBORw0KGgo","Not Now":"iVBORw0KGgo"}';

const validateRegex = /^(?=.*Update)(?=.*Rollback)(?=.*Skip)(?=.*Not Now).*$/;
const extractRegex = /Update|Rollback|Skip|Not Now/g;

// 处理示例1
if (validateRegex.test(str1)) {
  console.log(str1.match(extractRegex)); // 输出: ["Update", "Rollback", "Skip", "Not Now"]
} else {
  console.log([]);
}

// 处理示例2
if (validateRegex.test(str2)) {
  console.log(str2.match(extractRegex));
} else {
  console.log([]); // 输出: []
}

二、更优的非正则方案(推荐)

因为你的输入是JSON格式,直接解析JSON然后检查键是否存在会更准确、更易维护,不会出现正则可能的误判(比如某个值里包含关键词但键不存在的情况)。

示例(JavaScript):

function checkAndReturnKeys(jsonStr) {
  const requiredKeys = ['Update', 'Rollback', 'Skip', 'Not Now'];
  try {
    const obj = JSON.parse(jsonStr);
    // 检查所有必填键是否都存在
    const allExist = requiredKeys.every(key => Object.prototype.hasOwnProperty.call(obj, key));
    return allExist ? requiredKeys : [];
  } catch (e) {
    // JSON解析失败时返回空数组
    return [];
  }
}

// 测试示例1
console.log(checkAndReturnKeys('{"Update":"iVBORw0KGgo","Rollback":"iVBORw0KGgo","Skip":"iVBORw0KGgo","Not Now":"iVBORw0KGgo"}'));
// 输出: ["Update", "Rollback", "Skip", "Not Now"]

// 测试示例2
console.log(checkAndReturnKeys('{"Update":"iVBORw0KGgo","Skip":"iVBORw0KGgo","Not Now":"iVBORw0KGgo"}'));
// 输出: []

这个方案逻辑清晰,还能处理JSON格式错误的情况,比正则更适配你的场景。


内容的提问来源于stack exchange,提问作者D3W10

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 18:12:39