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

如何匹配正则表达式分组与其对应的小写形式?

正则匹配需求实现方案

需求示例

匹配规则:冒号前为全大写字母串,冒号后必须是该串的全小写形式,具体示例如下:

# 匹配
AAAA: aaaa
# 匹配
ABCD: abcd
# 不匹配
AAAA: abcd
# 不匹配
AAAA: AaAa

遇到的问题

之前找到的方案用到了\L语法,但它仅在PHP的正则替换场景生效,匹配时用不了,而且JavaScript完全不支持该语法。另外尝试的(\w+): \1,加不区分大小写选项后会错误匹配AAAA: AaAa,不符合需求。

JavaScript实现方案

由于JS正则没有直接在匹配时转换捕获组大小写的语法,需要结合正则匹配+字符串验证的方式实现:

1. 单行匹配验证

先匹配格式,再验证前后内容的大小写对应关系:

const checkMatch = (str) => {
  const regex = /^([A-Z]+): ([a-z]+)$/;
  const result = str.match(regex);
  return result && result[1].toLowerCase() === result[2];
};

// 测试示例
console.log(checkMatch("AAAA: aaaa")); // true
console.log(checkMatch("ABCD: abcd")); // true
console.log(checkMatch("AAAA: abcd")); // false
console.log(checkMatch("AAAA: AaAa")); // false

2. 多行文本批量处理

遍历每一行,提取前后部分后验证:

const text = `AAAA: aaaa
ABCD: abcd
AAAA: abcd
AAAA: AaAa`;

const lineRegex = /^([A-Z]+): (.+)$/gm;
let match;

while ((match = lineRegex.exec(text)) !== null) {
  const [fullLine, prefix, suffix] = match;
  const isMatch = prefix.toLowerCase() === suffix && suffix === suffix.toLowerCase();
  console.log(`${isMatch ? "匹配" : "不匹配"}:${fullLine}`);
}

原理说明

  • 先用正则^([A-Z]+): ([a-z]+)$限定格式:前面是全大写字母,后面是全小写字母,确保基本格式符合要求;
  • 通过prefix.toLowerCase() === suffix验证小写后的前缀和后缀完全一致,避免AAAA: abcd这种不对应的情况;
  • 额外判断suffix === suffix.toLowerCase(),排除AAAA: AaAa这种后缀不全小写的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:41:11