我想弄清楚如何只抓住已知的开始和结束字符串之间的值。例如,使用此字符串:使用正则表达式提取字符串给定的模式在使用
I need [?Count?] [?Widgets?]
我所需要的值计数和小工具返回。
我试图
[?(。*)?]
,并结束了与
I need [
Count
] [
Widgets
]
有没有一种方法,利用这些开始和结束的字符串,以解析出我需要的值?或者,我应该尝试找到一种方法在分析值之前更改它们?我非常感谢您提供的任何帮助。
谢谢!
我想弄清楚如何只抓住已知的开始和结束字符串之间的值。例如,使用此字符串:使用正则表达式提取字符串给定的模式在使用
I need [?Count?] [?Widgets?]
我所需要的值计数和小工具返回。
我试图
[?(。*)?]
,并结束了与
I need [
Count
] [
Widgets
]
有没有一种方法,利用这些开始和结束的字符串,以解析出我需要的值?或者,我应该尝试找到一种方法在分析值之前更改它们?我非常感谢您提供的任何帮助。
谢谢!
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?]']
在您的正则表达式尝试\[\?([^\?]*)\?\]
请注意,代替'[^ \?] *'你可以做'。*?':后者意味着“匹配尽可能最短的匹配”,在这种情况下,它找到的第一个“?]”,但仅此而已。 –
我知道这是懒惰的ALG,但我的表情也可以))) – verybadbug
Thanks verybadbug。在上面使用Ben's str的时候,我试过了:var p = str.match(\ [\?([^ \?] *)\?\]);但由于语法而无法工作。我错过了明显的东西吗?谢谢。 – DrZ
谢谢你本。使用这些角色可能不是最好的。你的功能很好。我真的很感谢你的帮助:) – DrZ