如何在此正则表达式中重复最后一个块

时间:2012-11-26 17:23:05

标签: javascript regex

以下代码

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"]

我做错了什么?

2 个答案:

答案 0 :(得分:1)

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

您必须手动选择组...

应该是:

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

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

/[#!]/|/$

上述正则表达式意味着将字符串拆分为出现/后跟#!后跟/

的字符串

/后跟字符串$

的结尾

答案 1 :(得分:-1)

 Regex pattern = new Regex("[^0-9a-zA-Z]*\\w{5,}");

按上述代码进行更改并尝试