2011-10-10 96 views
0

我想弄清楚如何只抓住已知的开始和结束字符串之间的值。例如,使用此字符串:使用正则表达式提取字符串给定的模式在使用

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

我所需要的值计数小工具返回。

我试图

[?(。*)?]

,并结束了与

I need [ 
Count 
] [ 
Widgets 
] 

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

谢谢!

回答

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?]'] 
+0

谢谢你本。使用这些角色可能不是最好的。你的功能很好。我真的很感谢你的帮助:) – DrZ

1

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

+0

请注意,代替'[^ \?] *'你可以做'。*?':后者意味着“匹配尽可能最短的匹配”,在这种情况下,它找到的第一个“?]”,但仅此而已。 –

+0

我知道这是懒惰的ALG,但我的表情也可以))) – verybadbug

+0

Thanks verybadbug。在上面使用Ben's str的时候,我试过了:var p = str.match(\ [\?([^ \?] *)\?\]);但由于语法而无法工作。我错过了明显的东西吗?谢谢。 – DrZ