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' +

在下面的代码中,我没有得到正确的结果。如何在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")
我得到下面的输出

如果我以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;
}