Javascript正则表达式字符串之间的第一个括号包括内部括号

时间:2015-06-12 03:55:37

标签: javascript regex

我有这样的字符串

[test: test1: http://localhost?test=[1,2]]
[test: test2: http://localhost?test=[2,3]]

我想从下面的文字中提取

$1 = "test1"
$2 = "http://localhost?test=[1,2]"

$1 = "test2"
$2 = "http://localhost?test=[2,3]"

我正在尝试的是

/\[test:(.*?):(.*?)\]/

但它会像这样返回。没有“]”

$2 = "http://localhost?test=[2,3"

如何更改正则表达式以获得我的意图?感谢。

2 个答案:

答案 0 :(得分:1)

正则表达式的一个修复方法是将]包含在第二组中:

/\[test:(.*?):(.*?\])\]/
// add this ------^^

另一个解决方法是让正则表达式末尾的现有\]仅匹配,如果它位于字符串的末尾:

/\[test:(.*?):(.*?)\]$/

答案 1 :(得分:0)

我猜,你得到一个URL作为第二个参数。 制作一个包含所有可能的URL值的正确正则表达式真的不容易。

[test: test1: http://localhost?test=[1,2]]
[test: test1: http://localhost?test=[1,2]&somekey=somevalue]
[test: test1: http://localhost?test=[1,2]&answers=[1,2,3]]

你试图自己找到这样的正则表达式。你来到这里,问了这个问题并花费了大量的时间来寻找合适的正则表达式。 即使你现在找到这样的正则表达式,你真的需要吗?

正如一句热门话题所说:

  

有些人在面对问题时会想到,我知道,我会使用正则表达式。"
  现在他们有两个问题。

这取决于您的选择,我只能推荐,但有简单快速方式,可与任何数据一起使用输入:

var str = "[test: test1: http://localhost?test=[1,2]]";
str = str.substring(1, str.length - 1);

var vals = str.split(': ');

console.log(vals[1]);
console.log(vals[2]);

没有正则表达,没有头痛。我不想说"不要使用正则表达式#34;我想说"在不需要时不要使用它" :)