Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
第一个括号之间的Javascript正则表达式字符串,包括内括号_Javascript_Regex - Fatal编程技术网

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

第一个括号之间的Javascript正则表达式字符串,包括内括号,javascript,regex,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:(.*?):(.*?)\]/ 但它是这样回来的。没有

我有这样的绳子

[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:(.*?):(.*?)\]/
但它是这样回来的。没有“]””


如何更改我的regexp以获得我想要的?谢谢。

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

/\[test:(.*?):(.*?\])\]/
// add this ------^^
另一个修复方法是,只有在正则表达式位于字符串末尾时,才将现有的
\]
放在正则表达式的末尾:

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

我猜,你会得到一个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]]
你自己也试图找到这样的regexp。你来到这里,问了这个问题,花了那么多的时间试图找到一个合适的正则表达式。 即使你现在找到了这样的正则表达式,你真的需要它吗

正如一句流行的格言所说:

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

这取决于您的选择,我只能推荐,但有一种简单快速的方法,可以处理输入中给出的任何数据:

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]);

没有正则表达式,没有头痛。我不想说“不要使用正则表达式”,我想说“不需要时不要使用它”:)

使用简单的字符串函数更容易、更快地解决了这个问题。您可以删除第一个和最后一个大括号中的一个,然后使用
/test:(.*):(.*)/
。或者您可以使用字符串拆分。它不适用于输入
[测试:测试2:http://localhost?test=[2,3]&something=something]
@YeldarKurmangaliyev-那么?这不是OP询问的格式。它适用于指定的输入。不管怎样,我刚刚添加了第二个变体,可以使用。谢谢你们两位!第二个案例正是我需要的。谢谢你的建议。我也考虑过不使用正则表达式,因为我不习惯它。。。但在我的例子中,示例字符串位于其他大量文本中,因此我不能使用split。
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]);