正则表达式多次匹配多个相同的表达式

时间:2019-06-10 11:52:43

标签: javascript regex

我有这个字符串{bgRed Please run a task, {red a list has been provided below},我需要替换字符串以删除花括号和第一个单词。

因此,在下面,我想删除{bgRed{red,然后删除我可以分开的尾括号。

我设法创建了此正则表达式,但是它仅与{bgRed匹配,而与{red不匹配,有人可以伸出援手吗?

/^\{.+?(?=\s)/gm

2 个答案:

答案 0 :(得分:3)

请注意,您在开头使用^锚,这会使您的模式仅在行的开头匹配(还请注意m修饰符)。 .+?(?=\s|$)太麻烦了,您要匹配任何1个以上的字符,直到第一个空格或字符串的末尾,请使用{\S+(或{\S*,如果您打算匹配{后面没有任何非空白字符)。

您可以使用

s = s.replace(/{\S*|}/g, '')

您可以调整结果以消除产生的前导/尾随空格:

s = s.replace(/{\S*|}/g, '').trim()

请参见regex demoregex graph

enter image description here

详细信息

  • {\S*-{字符,后跟0个或多个非空白字符
  • |-或
  • }-一个}字符。

答案 1 :(得分:2)

如果目标是来自

"{bgRed Please run a task, {red a list has been provided below}"

"Please run a task, a list has been provided below"

具有两个捕获组的正则表达式似乎最简单:

const original = "{bgRed Please run a task, {red a list has been provided below}";
const rex = /\{\w+ ([^{]+)\{\w+ ([^}]+)}/g;
const result = original.replace(rex, "$1$2");
console.log(result);

\{\w+ ([^{]+)\{\w+ ([^}]+)}是:

  • \{-文字{
  • \w+-一个或多个文字字符(“ bgRed”)
  • 文字空间
  • ([^{]+)捕获到第1组的不是{的一个或多个字符
  • \{-另一个文字{
  • \w+-一个或多个文字字符(“红色”)
  • ([^}]+)-不是}的一个或多个字符,已捕获到第2组
  • }-文字}

替换使用$1$2交换捕获组内容。