0

令牌可以是这样的{num}{num:2}(2 是 arg)

我想实现这样的匹配:

// no args
[0] = num

// args (anything after the colon and before the closing brace as one match is fine)
[0] = num
[1] = 2

我设法匹配大括号中的任何东西,但我的正则表达式太菜鸟,无法得到比这更复杂的东西!谢谢。

仅供参考,我正在使用 javascript 并\{(.*?)\}匹配其中的所有内容。

4

1 回答 1

1

你可以这样做:

\{(.*?)(?::(.*?))?\}

和一个测试:

> '{foo:bar}'.match(/\{(.*?)(?::(.*?))?\}/)
["{foo:bar}", "foo", "bar"]
> '{foo}'.match(/\{(.*?)(?::(.*?))?\}/)
["{foo}", "foo", undefined]
  • (.*?)非贪婪地匹配第一组。
  • (?:...)是非捕获组。它就像一个普通的捕获组,但它不会被捕获。
  • :(.*?)捕获冒号后面的东西。
  • ?使最后一个组(包含冒号和第二个捕获组)可选。
于 2013-04-19T21:38:42.010 回答