通过字符串跳过/忽略特定字符来查看

时间:2012-09-21 06:17:57

标签: regex

我正试图围绕这一点,google和stackoverflow上的所有示例都没有帮助我理解。

我有这个字符串

{{@test: mytest}} {{@test mytest}}

我想从这两个示例中捕获testmytest。所以,如果在我的字符串中发生这两种情况,它们将返回相同的数组集。

这是我到目前为止所尝试的内容

/{{\s*@\s*(.*)\s*:\s*(.*)\s*}}/

这将适用于第一个示例,但不会在第二个示例上使用。

所以我想也许答案是搜索跳过:的字符串?

2 个答案:

答案 0 :(得分:2)

您尚未明确定义标准,但假设您要匹配的文本可能不包含空格,则可以使用此标准:

/{{\s*@\s*([^:\s]*)\s*:?\s*([^}\s]*)\s*}}/
  • [^:\s]*匹配既不包含冒号也不包含空格的字符串
  • [^}\s]*匹配既不包含右括号也不包含空格的字符串
  • :?匹配可选的冒号

答案 1 :(得分:1)

尝试\{\{\s*@([^@:\s]+)\s*:?\s+([^}\s]+)\s*\}\}

编辑: Ack,Tim Pietzcker打败了我。我们的表达方式之间存在一些微妙的差异,但我认为其中任何一个都应该做你想要的。我选择在一些地方使用+而不是*,在那里我对你的问题的解释让我相信必须至少有一个给定的角色。

编辑2:我的方法的一个优点是它与{{@testmy-test}}不匹配。

相关问题