0

以下代码

var input = "http://local.app.com/frontend/v12/#/M1WPD/!/abcde/!/fghij/";

var regex = new RegExp("(?:.+?#/([a-zA-Z0-9]{5})/(?:!/([a-zA-Z0-9]{5})/)*)");

var result = input.match(regex);

console.log(result);

// ["http://local.app.com/frontend/v12/#/M1WPD/!/abcde/!/fghij/", "M1WPD", "fghij"]

应该打印这个...

["http://local.app.com/frontend/v12/#/M1WPD/!/abcde/!/fghij/", "M1WPD", "abcde", "fghij"]

旁...

["http://local.app.com/frontend/v12/#/M1WPD/!/abcde/!/fghij/", "M1WPD", "fghij"]

我究竟做错了什么?

4

2 回答 2

1

您无法n通过量词捕获组数。结果是它将捕获该特定组中最后出现的匹配!

您必须手动选择组...

它应该是:

(?:.+?#/([a-zA-Z0-9]{5})/!/([a-zA-Z0-9]{5})/!/([a-zA-Z0-9]{5})

如果有任意数量的匹配项,您可以split使用以下正则表达式

/[#!]/|/$

上面的正则表达式表示拆分出现/后跟#!后跟的字符串/

或者

/后跟字符串的结尾$

于 2012-11-26T17:28:42.820 回答
-1
 Regex pattern = new Regex("[^0-9a-zA-Z]*\\w{5,}");

按照上面的代码进行更改并尝试

于 2012-11-26T17:35:05.770 回答