Regex 正则表达式以匹配把手表达式和默认值

Regex 正则表达式以匹配把手表达式和默认值,regex,Regex,我松散地遵循一个手柄模式来替换字符串中{{copy}表达式的实例 以下是我试图匹配的字符串/场景的一些示例: {{copy}} 一些文本,然后{{copy}},然后是一些其他文本 some{{copy'default value here'}}here 本质上,{{copy}可以出现在字符串中的任何位置,还可以包含一个默认值,我还需要使用正则表达式将其提取出来 我尝试了以下我认为会匹配的方法,但是我没有运气 \b{{copy*}}\b 您可以使用此正则表达式: /{{(copy)\

我松散地遵循一个手柄模式来替换字符串中
{{copy}
表达式的实例

以下是我试图匹配的字符串/场景的一些示例:

  • {{copy}}
  • 一些文本,然后{{copy}},然后是一些其他文本
  • some{{copy'default value here'}}here
本质上,
{{copy}
可以出现在字符串中的任何位置,还可以包含一个默认值,我还需要使用正则表达式将其提取出来

我尝试了以下我认为会匹配的方法,但是我没有运气

    \b{{copy*}}\b

您可以使用此正则表达式:

/{{(copy)\b(?: +'([^']*)')?}}/
说明:

  • {{
    -预期把手启动
  • (复制)
    -捕获文本
    copy
    (替换为
    [a-z]+
    以支持可变关键字)
  • \b
    -需要一个单词边界
  • (?:
    )?
    -非捕获组,尾部的
    使其成为可选组
    • +'([^']*)”
      -期望1+个空格,一个引号,在下一个引号之前捕获所有内容,期望引号
  • }
    -除了把手端
  • 现在,您可以使用
    $1
    $2
    \1
    \2
    或数组引用捕获组,具体取决于正则表达式引擎/语言结构
您可以使用

{{copy\s*([^}]*)}
看。详情:

  • {{copy
    -文字文本
  • \s*
    -零个或多个空格
  • ([^}]*)
    -捕获组1:除
    }
  • }
    -一个
    }
    字符串

如果
{{
}
前面/后面不需要单词字符,则不要使用单词边界。只需使用
{copy[^}]*}
注意
copy*
匹配
cop
copy
以及
copyyyyyy
您还可以使用
{copy\b.*}
{code>{(copy\b)(.?}}}}分别将内容放入捕获组1和2。克雷格,你的意图是什么?请澄清,或者让我知道什么对你有效。@WiktorStribiżew-你的建议非常有效,谢谢。