如何用正则表达式捕获连字符后带空格的目标值?
解决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
相关产品推荐
相关产品推荐

