在下面的代码中我没有得到正确的结果。我怎样才能在javascript中进行模式匹配?
function getPathValue(url, input) {
console.log("this is path key :"+input);
url = url.replace(/%7C/g, '|');
var inputarr = input.split("|");
if (inputarr.length > 1)
input = '\\b' + inputarr[0] + '\n|' + inputarr[1] + '\\b';
else
input = '\\b' + input + '\\b';
var field = url.search(input);
var slash1 = url.indexOf("/", field);
var slash2 = url.indexOf("/", slash1 + 1);
if (slash2 == -1)
slash2 = url.indexOf("?");
if (slash2 == -1)
slash2 = url.length;
console.log("this is path param value :"+url.substring(slash1 + 1, slash2));
return url.substring(slash1 + 1, slash2);
}
getPathValue("http://localhost/responsePath/mountainwithpassid|accesscode/100/mountainwithpassid|passid/1","mountainwithpassid|passid")
我得到以下输出
如果我传递mountainwithpassid | accesscode作为输入,我得到输出为 100.如果我通过
,也一样key:mountainwithpassid | passid
值:100 //预期输出1
答案 0 :(得分:1)
如果您的目的是简单地检索输入后面的路径中的值(包含在'/'中),那么您可以使用更简单的正则表达式来实现此目的。首先,您将需要一个方法来转义输入字符串,因为它包含管道符“|”在正则表达式中翻译为OR。
您可以使用此功能(取自https://stackoverflow.com/a/3561711):
RegExp.escape= function(s) {
return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
};
然后你的getPathValue
函数看起来像:
function getPathValue(url, input) {
var pathValue = null;
var escapedInput = RegExp.escape(input);
// The RegExp below extracts the value that follows the input and
// is contained within '/' characters (the last '/' is optional)
var pathValueRegExp = new RegExp(".*" + escapedInput + "/([^/]+)/?.*", 'g');
if (pathValueRegExp.test(url)) {
pathValue = url.replace(pathValueRegExp, '$1');
}
return pathValue;
}
您还需要考虑如何处理错误 - 在示例中,如果未找到匹配项,则返回null值。
答案 1 :(得分:0)
我试图理解这个问题。给定URL:
"http://localhost/responsePath/mountainwithpassid|accesscode/100/mountainwithpassid|passid/1"
和论点:
"mountainwithpassid|passid"
您希望返回值为:
"1"
的论据
"mountainwithpassid|accesscode"
应该返回:
"100"
这是对的吗?如果是这样(我不确定),那么以下内容可能适用:
function getPathValue(url, s) {
var x = url.indexOf(s);
if (x != -1) {
return url.substr(x).split('/')[1];
}
}
var url = "http://localhost/responsePath/mountainwithpassid|accesscode/100/mountainwithpassid|passid/1";
var x = "mountainwithpassid|passid";
var y = "mountainwithpassid|accesscode";
console.log(getPathValue(url, x)); // 1
console.log(getPathValue(url, y)); // 100