使用正则表达式在JavaScript中提供给定模式的字符串

时间:2011-10-10 23:31:06

标签: javascript regex

我正在试图弄清楚如何只抓取已知的开始和结束字符串之间的值。例如,使用此字符串:

I need [?Count?] [?Widgets?]

我需要返回值计数小部件

我试过

  

[?(。*)?]

最后以

结束
I need [
Count
] [
Widgets
]

有没有办法,使用这些开始和结束字符串来解析我需要的值?或者我应该在解析值之前尝试找到更改它们的方法?我非常感谢您提供的任何帮助。

谢谢!

2 个答案:

答案 0 :(得分:2)

var str = "I need [?Count?] [?Widgets?]";
$(str.match(/\[\?.*?\?\]/g)).map(function(i) { return this.match(/\[\?(.*)\?\]/)[1] });
// => ['Count'], 'Widgets']

请注意,在正则表达式中,您必须转义[]?,因为它们是特殊字符。还可以使用正则表达式末尾的g标志来查找所有匹配项。我也使用.*?代替.* - 这意味着非贪婪的匹配或“找到最短的匹配”,这就是你想要的。

最后,结果被映射(使用jquery map)来删除'[?'和结果中的'?]'。

或者,如果您不想删除特殊字符,请不要使用地图:

var str = "I need [?Count?] [?Widgets?]";
str.match(/\[\?.*?\?\]/g);
// => ['[?Count?]'], '[?Widgets?]']

答案 1 :(得分:1)

在正则表达式中尝试\[\?([^\?]*)\?\]