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

时间:2019-12-19 03:16:35

标签: javascript regex string

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

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

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

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

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

在此先感谢您的帮助,

山姆

奖金问题: 如何将这些返回的值推回原始数组中?

1 个答案:

答案 0 :(得分:2)

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

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

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

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

symbols.forEach(symbol => { 
  console.log((symbol.match(/.+?(?=(?:\+|$))/) || [""])[0])
})