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

如何用正则表达式捕获连字符后带空格的目标值?

解决JavaScript正则捕获"-H"或"- H"的问题

你之前用的正则(?=\S*['-])([a-zA-Z'-]+)抓不到带空格的"- H",核心问题是这个正则里的\S匹配非空白字符,直接排除了空格的存在,而且捕获组[a-zA-Z'-]+也不包含空格,自然匹配不了带空格的情况。

要同时兼容"-H"和"- H"这两种形式,只需要允许-和目标字符之间有可选的单个空格就行,用正则的?元字符(表示前面的元素出现0次或1次)就能实现。

针对固定目标字符"H"的正则

如果只需要捕获"-H"或"- H",可以用这个正则:

// 直接匹配
const regex = /- ?H/;
// 要捕获分组的话(方便提取匹配内容)
const regexWithGroup = /(- ?H)/;

代码示例

// 单个匹配场景
const str1 = "This is non-refundable -H";
const match1 = str1.match(/- ?H/);
console.log(match1?.[0]); // 输出 "-H"

// 多个匹配场景
const str2 = "Here is -H and another - H case";
const matches2 = [...str2.matchAll(/(- ?H)/g)];
matches2.forEach(item => {
  console.log(item[1]); // 依次输出 "-H"、"- H"
});

扩展:匹配任意字母的情况

如果你的需求不止是"H",而是要匹配"-X"或"- X"这类形式(X为任意字母),可以把正则调整为:

// 捕获整个带可选空格的部分
const regexGeneral = /(- ?[a-zA-Z])/g;
// 或者单独捕获后面的字母
const regexCaptureLetter = /- ?([a-zA-Z])/g;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:10:40