我有这个字符串{bgRed Please run a task, {red a list has been provided below}
,我需要替换字符串以删除花括号和第一个单词。
因此,在下面,我想删除{bgRed
和{red
,然后删除我可以分开的尾括号。
我设法创建了此正则表达式,但是它仅与{bgRed
匹配,而与{red
不匹配,有人可以伸出援手吗?
/^\{.+?(?=\s)/gm
答案 0 :(得分:3)
请注意,您在开头使用^
锚,这会使您的模式仅在行的开头匹配(还请注意m
修饰符)。 .+?(?=\s|$)
太麻烦了,您要匹配任何1个以上的字符,直到第一个空格或字符串的末尾,请使用{\S+
(或{\S*
,如果您打算匹配{
后面没有任何非空白字符)。
您可以使用
s = s.replace(/{\S*|}/g, '')
您可以调整结果以消除产生的前导/尾随空格:
s = s.replace(/{\S*|}/g, '').trim()
详细信息
{\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
交换捕获组内容。