话不多说,直接上代码。
const readline = require('readline')
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
// 监听键入回车事件
var a=new Array([]),k=0;
rl.on('line', (str) => {
// str即为输入的内容
if (str === 'close') {
// 关闭逐行读取流 会触发关闭事件
rl.close()
}
a[k++]=str;//保存读入数据
});
var urls=new Array([]);
function check(text){
for(var i=0;i<urls.length;i++){
var fd=urls[i].toString().split(" ");
var arr1=fd[0].split("/");
var arr2=text.split("/");
//console.log(arr1.length,":",arr2.length);
var flag=true;
if(arr1.length>arr2.length){
continue;
}
for(var j=0;j<arr2.length && j<arr1.length;j++){
if(arr1[j]!=arr2[j]){
if(arr1[j]==="<int>"){
cl=arr2[j];
while(cl[0]==0 && cl.length>1){
cl=cl.substr(1,cl.length-1);
}
if(parseInt(cl)+" "!==cl+" "){
flag=false;
break;
}
}else if(arr1[j]==="<str>"){
if(arr2[j]===""){
flag=false;
break;
}
//air
}else if(arr1[j]==="<path>"){
if(arr2[j]=="") flag=false;
break;
}else{
flag=false;
break;
}
}
}
if(flag){
if(arr1.length!=arr2.length){
if(arr1[arr1.length-1]!="<path>"){
flag=false;
}
}
}
if(flag){
var cans="";
for(var j=0;j<arr1.length;j++){
if(arr1[j]==="<str>")
cans+=(cans===""?"":" ")+arr2[j];
else if(arr1[j]==="<int>")
cans+=(cans===""?"":" ")+parseInt(arr2[j]);
else if(arr1[j]==="<path>"){
var tmp="";
for(var l=j;l<arr2.length;l++){
tmp+=(tmp===""?"":"/")+arr2[l];
}
cans+=(cans===""?"":" ")+tmp;
}
}
//if(urls[i].split(" ")[1]==="A4rQS09ms"){
// console.log("❤",a[ii+n]);
//}
return urls[i].split(" ")[1]+" "+cans;
}
}
return "404";
}
var ii=0;
var n,m;
rl.on('close', () => { //输入完毕
//输入完后处理。
//输入完后变量为a。
var arr = a[0].split(" ");
n=parseInt(arr[0]),m=parseInt(arr[1]);
for(var i=0;i<n;i++){
urls[i]=a[i+1].toString();
}
for(ii=0;ii<m;ii++){
console.log(check(a[ii+n+1]));
}
});
注意:
1.参数指 <str>
<int>
<path>
内容。
2.注意 <int>
删除前导0时不要把最后一位删掉。(0)
3.<str>
不能为空(需要判断)
tql!(不过js考试的时候不让用吧)
URL映射中 匹配但是链接没有参数是什么意思?
哪个
orz