如何用正则表达式提取USD-M后逗号及AND分隔的单词?
正则直接提取USD-M后由逗号/and分隔的单词
要直接通过正则提取目标单词,无需后续拆分,可以利用正向断言限定单词的上下文范围,结合全局匹配实现需求。
正则表达式说明
/(?<=USD-M(?:\s+\w+(?:\s*(?:,|and)\s*))*)\w+(?=\s*(?:,|and|\s+\w+))/gi
- 正向后行断言
(?<=USD-M(?:\s+\w+(?:\s*(?:,|and)\s*))*):确保目标单词位于USD-M之后,且前面是合法的分隔序列(单词+逗号/and),避免匹配句子其他位置的无关单词。 \w+:匹配单个目标单词。- 正向先行断言
(?=\s*(?:,|and|\s+\w+)):确保单词后面是逗号、and,或是后续非目标单词(比如Perpetual/Spot等),限定目标序列的结束边界。 gi标志:g表示全局匹配所有符合条件的单词,i表示忽略大小写(适配可能的大小写变体)。
代码示例
// 多单词场景 const input1 = "We will launch new USD-M NFP, MOVR, PLEX and GAS Perpetual Contracts"; const regex = /(?<=USD-M(?:\s+\w+(?:\s*(?:,|and)\s*))*)\w+(?=\s*(?:,|and|\s+\w+))/gi; const result1 = input1.match(regex); console.log(result1); // 输出: ['NFP','MOVR','PLEX','GAS'] // 单个单词场景 const input2 = "We will launch new USD-M NFP Spot Market"; const result2 = input2.match(regex); console.log(result2); // 输出: ['NFP']
另一种更直观的实现(结合matchAll)
如果觉得断言正则稍复杂,也可以用matchAll配合捕获组,先匹配带上下文的目标单词,再提取核心内容:
const regex = /(?:USD-M\s+|\s*(?:,|and)\s*)(\w+)/gi; // 处理多单词场景 const matches1 = [...input1.matchAll(regex)]; const result1 = matches1.map(match => match[1]); console.log(result1); // ['NFP','MOVR','PLEX','GAS'] // 处理单个单词场景 const matches2 = [...input2.matchAll(regex)]; const result2 = matches2.map(match => match[1]); console.log(result2); // ['NFP']
这种方式逻辑更清晰:匹配USD-M开头或逗号/and分隔符后的单词,通过捕获组提取核心内容,再整理成目标数组。
内容的提问来源于stack exchange,提问作者OwnInTheFoam
相关产品推荐
相关产品推荐

