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

如何用正则匹配数字间含3个问号且数字和为10的字符串

解决方案

要实现判断字符串中是否存在**两个单个数字之和为10,且中间恰好包含3个问号(可夹杂其他非数字字符)**的情况,可以结合正则匹配和JavaScript逻辑处理,具体步骤如下:

步骤说明

  1. 匹配有效数字对:先提取字符串中所有「两个单个数字包裹、中间无其他数字」的子串,避免中间数字干扰判断。
  2. 校验数字和:对每个提取的子串,计算两个数字的和是否为10。
  3. 统计问号数量:校验符合和为10的子串中,问号数量是否恰好为3。
  4. 返回结果:只要存在任意一组符合条件的数字对,返回true;否则返回false。

实现代码

function QuestionsMarks(str) {
  // 匹配所有两个单个数字(中间无其他数字)的子串
  const numPairs = str.match(/\d[^\d]*?\d/g) || [];

  for (const pair of numPairs) {
    // 提取两个数字并转为数值类型
    const [num1, num2] = pair.match(/\d/g).map(Number);
    // 校验数字和是否为10
    if (num1 + num2 !== 10) continue;
    // 统计子串中问号的数量
    const questionCount = (pair.match(/\?/g) || []).length;
    // 问号数量恰好为3则返回true
    if (questionCount === 3) {
      return true;
    }
  }

  // 无符合条件的数字对,返回false
  return false;
}

// 测试示例
console.log(QuestionsMarks("acc?7??sss?a3rr1??????5")); // 输出: true
console.log(QuestionsMarks("aabc9??nnh?a1")); // 输出: true
console.log(QuestionsMarks("a9??a1")); // 输出: false
console.log(QuestionsMarks("a8??a3")); // 输出: false

代码解释

  • 正则/\d[^\d]*?\d/g:匹配两个单个数字,中间为任意非数字字符(非贪婪模式确保匹配最近的数字对)。
  • pair.match(/\d/g).map(Number):从每个数字对子串中提取两个数字并转为数值,方便计算和。
  • (pair.match(/\?/g) || []).length:统计子串中的问号数量,若没有问号则返回空数组,长度为0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:18:18