javascript - JavaScript 中的模式匹配

标签 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' + 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/

相关文章:

javascript - AngularJS 摘要循环错误,ngmodel 在自定义验证中被删除

java - 创建包含分隔符的 on split 方法

Python 正则表达式 - 用括号的内容替换括号内的文本

javascript - Node.js 中如何处理互包含?

javascript - 这是 Node/promisify 异步函数的有效语法吗?

javascript - 继承关联 : set[Models] adds new models instead of associating existing ones

Javascript/jQuery If 条件

javascript - 使用 php 从网络服务器读取时,JSON 文件返回 null。

ASP.NET:使用应用程序范围的 Regex 对象安全吗?

node.js - 带有sql查询的私有(private)字段