javascript中的模式匹配
在下面的代码中,我没有得到正确的结果。如何在javascript中进行模式匹配javascript中的模式匹配,javascript,regex,node.js,pattern-matching,Javascript,Regex,Node.js,Pattern Matching,在下面的代码中,我没有得到正确的结果。如何在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' +
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")
我得到下面的输出如果我以Passid | accesscode作为输入通过Mountain,我将获得输出作为 100如果我通过,也是这样 关键字:mountainwithpassid | passid
值:100//预期输出1
我在努力理解这个问题。给定的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
如果您的目的是简单地检索输入后面的路径(包含在“/”中)中的值,那么您可以使用更简单的正则表达式来实现这一点。首先,您需要一个方法来转义输入字符串,因为它包含一个管道字符“|”,该字符被翻译为或在正则表达式中 您可以使用以下内容(摘自): 然后,您的
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;
}
您还需要考虑如何处理错误-在本例中,如果未找到匹配项,将返回空值。那么正确的输出是什么,您希望从URL中得到什么?@Cygwinnian my input是mountainwithpassid | passid,它应根据URL返回1作为输出。
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;
}