Javascript url模式需要正则表达式

Javascript url模式需要正则表达式,javascript,regex,Javascript,Regex,我正在添加一些简单的路由,而不使用任何特定的框架 当前正则表达式--> 可能的url模式是 settings // should be matched to --> group1 = settings, group2 = null, group3 = null, group4 = null settings/ // should be matched to -->

我正在添加一些简单的路由,而不使用任何特定的框架

当前正则表达式-->

可能的url模式是

settings                                // should be matched to --> group1 = settings, group2 = null, group3 = null, group4 = null
settings/                               // should be matched to --> group1 = settings, group2 = null, group3 = null, group4 = null
settings/205                            // should be matched to --> group1 = settings, group2 = null, group3 = null, group4 = 205

settings/notifications                  // should be matched to --> group1 = settings, group2 = notifications, group3 = null, group4 = null
settings/notifications/                 // should be matched to --> group1 = settings, group2 = notifications, group3 = null, group4 = null
settings/notifications/50               // should be matched to --> group1 = settings, group2 = notifications, group3 = null, group4 = 50

settings/notifications/pingers          // should be matched to --> group1 = settings, group2 = notifications, group3 = pingers, group4 = null
settings/notifications/pingers/         // should be matched to --> group1 = settings, group2 = notifications, group3 = pingers, group4 = null
settings/notifications/pingers/101      // should be matched to --> group1 = settings, group2 = notifications, group3 = pingers, group4 = 101
非常感谢您的帮助

您可以在
/
string#拆分
,测试最后一个单词是否为数字和空字符串,并使用解构创建对象

var arr=['settings'、'settings/'、'settings/notifications'、'settings/notifications/'、'settings/notifications/50'、'settings/notifications/pingers'、'settings/notifications/pingers/'、'settings/notifications/pingers/101']
var result=arr.map(url=>{
var words=url.split('/');
var last=null;
if(/\d+/g.test(words[words.length-1]))
last=words.pop();
如果(!words[words.length-1]|/\s+/g.test(words[words.length-1]),则为else
words.pop();
var[group1,group2=null,group3=null]=[…单词];
var group4=最后一个;
返回{group1,group2,group3,group4};
});

控制台日志(结果)请在perl中尝试以下代码。这种模式本身在任何地方都适用

$string  = "settings/notifications/pingers/101";
#$string  = "settings/notifications/pingers";
#$string  = "settings/notifications";
#$string  = "settings";

$string  =~  m/^(\w+)(?:\/)?(\w+)?(?:\/)?(\w+)?(?:\/)?(\d+)?$/;

print $1."\n"; 
print $2."\n"; 
print $3."\n"; 
print $4."\n"; 

你已经试过的正则表达式在哪里?到底有什么不起作用?正如大多数“请给codez”的问题一样,这是一个太宽泛的话题。请特别注意。在
/
上拆分不是更容易吗?不,b/c我需要填充所有这4个组,如果拆分,我需要在阵列中循环,这是非常昂贵的。谢谢!首先,我不想使用map或任何其他成本太高的b/c迭代技术。其次,我可能会将其与服务器端语言(而不是节点)一起使用,而不能使用诸如解构和传播之类的东西。所以我真的在寻找一种匹配模式
$string  = "settings/notifications/pingers/101";
#$string  = "settings/notifications/pingers";
#$string  = "settings/notifications";
#$string  = "settings";

$string  =~  m/^(\w+)(?:\/)?(\w+)?(?:\/)?(\w+)?(?:\/)?(\d+)?$/;

print $1."\n"; 
print $2."\n"; 
print $3."\n"; 
print $4."\n";