我有这样的字符串
[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"
如何更改正则表达式以获得我的意图?感谢。
答案 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;我想说"在不需要时不要使用它" :)