正则表达式:匹配'+'之前的所有字符,如果不存在'+'则匹配整个字符串

问题描述 投票:-1回答:1

我正在尝试匹配字符串中+之前的所有字符,或者如果不存在该字符,则匹配整个字符串。

我已经很近了,到目前为止我有:

const symbols = ['@ES=107XN+HMUZ', '@NQ=107XN']

symbols.forEach(symbol => { 
  console.log((symbol.match(/.+?(?=[+])/g) || []).join(''))
})

如您所见,它匹配+之前的所有字符,但是当不存在+时,则不匹配任何字符串。

感谢您的任何帮助,

山姆

javascript regex string
1个回答
0
投票

积极的前瞻要求先行匹配。

您可以使用(?:\+|$)来匹配+或字符串的结尾。由于您之前有一个非贪婪的量词,因此它将与第一个匹配。

此外,您应该删除g修饰符。当模式起作用时,它最终返回一个包含整个字符串的数组,因为它找到了另一个从+开始的匹配项,然后将它们全部连接在一起。

const symbols = ['@ES=107XN+HMUZ', '@NQ=107XN']

symbols.forEach(symbol => { 
  console.log((symbol.match(/.+?(?=(?:\+|$))/) || [""])[0])
})
© www.soinside.com 2019 - 2024. All rights reserved.