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

标签 javascript regex string

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

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

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/

相关文章:

python - 从字符串中提取换行符

java - 如何在单独的行上输出字符串数组,每行允许有 N 个字符

javascript - 在web中显示java servlet进程

javascript - 使用 ENTER 阻止提交而无需一张表单

arrays - 基本 perl : regex statement not working in perl 5. 10.1 机器但在 5.18 中工作?

python - 使用 fnmatch 匹配文件名的 2 部分

javascript - URL 在浏览器中工作正常,但使用 ajax 请求时出现 404 错误

javascript - 如何在 promise 的 then 回调中设置 `this` 的上下文

javascript - 用于比较字符串与元音变音和非变音变体的正则表达式

Java文本分割算法