我正在尝试匹配字符串中+
之前的所有字符,或者如果不存在该字符,则匹配整个字符串。
我已经接近了,到目前为止,我有:
const symbols = ['@ES=107XN+HMUZ', '@NQ=107XN']
symbols.forEach(symbol => {
console.log((symbol.match(/.+?(?=[+])/g) || []).join(''))
})
如您所见,它匹配+
之前的所有字符,但是当+
不存在时,所有字符串都不匹配。
在此先感谢您的帮助,
山姆
奖金问题: 如何将这些返回的值推回原始数组中?
答案 0 :(得分:2)
积极的前瞻要求先行匹配。
您可以使用(?:\+|$)
来匹配+
或字符串的结尾。由于您之前有一个非贪婪的量词,因此它将与第一个匹配。
此外,您应该删除g
修饰符。模式起作用后,最终会返回一个包含整个字符串的数组,因为它找到了从+
开始的另一个匹配项,然后将它们全部连接在一起。
const symbols = ['@ES=107XN+HMUZ', '@NQ=107XN']
symbols.forEach(symbol => {
console.log((symbol.match(/.+?(?=(?:\+|$))/) || [""])[0])
})