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