在下面的代码中我没有得到正确的结果。如何在 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")
我得到以下输出
If I pass mountainwithpassid|accesscode as input Im getting output as 100. Same way if I pass
key :mountainwithpassid|passid
value :100 // Expected output 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;
}
您还需要考虑如何处理错误 - 在示例中,如果未找到匹配项,则返回空值。
关于javascript - JavaScript 中的模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21844238/