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

求可匹配单个&且后接字母数字的JavaScript正则表达式

解决方案

要实现你想要的匹配效果,我们可以利用正则的反向否定预查(ES2018及以上版本支持)来确保&的前面没有其他&,同时指定它后面必须紧跟字母数字字符。

推荐正则表达式

/(?<!&)&[a-zA-Z0-9]/g

正则逻辑说明

  • (?<!&):反向否定预查,断言当前位置的前一个字符不是&(字符串开头没有前导字符,自然也满足这个条件)
  • &:精准匹配目标&字符
  • [a-zA-Z0-9]:限定&后面必须紧跟字母或数字
  • g:全局修饰符,确保能找到所有符合条件的匹配项

测试验证代码

const testCases = [
  "&De&&let&&&e A&ll",
  "Hum&&an&s"
];

testCases.forEach(str => {
  const matches = str.match(/(?<!&)&[a-zA-Z0-9]/g);
  console.log(`字符串 "${str}" 的匹配结果:`, matches);
});

运行后输出结果:

字符串 "&De&&let&&&e A&ll" 的匹配结果: [ '&D', '&l' ]
字符串 "Hum&&an&s" 的匹配结果: [ '&s' ]

兼容旧版JavaScript(不支持反向预查)

如果你的运行环境不支持ES2018的反向预查语法,可以用捕获组提取目标内容:

const str = "&De&&let&&&e A&ll Hum&&an&s";
const matches = [...str.matchAll(/(?:^|[^&])(&[a-zA-Z0-9])/g)].map(item => item[1]);
console.log(matches); // [ '&D', '&l', '&s' ]

你原正则的问题分析

你之前写的(?:[^&]|^)&([a-zA-Z0-9])有两个核心问题:

  1. 整个匹配项会包含&前面的非&字符(比如A&ll中会匹配A&l,而不是你需要的&l)
  2. 捕获组只提取了&后面的字母数字,没有包含&本身,不符合你示例中匹配&D、&l这类完整内容的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:10:26