【问题标题】:My regular expression is not working Node.js?我的正则表达式在 Node.js 中不起作用?
【发布时间】:2019-04-27 22:30:21
【问题描述】:

我有一个正则表达式,可以将一些文本提取到一个数组中。该代码在前端运行良好,但在 node.js 服务器中无法运行。

每当我在后端运行代码时,我都会收到以下错误消息:

TypeError: Cannot read property '1' of null
   at C:\Users\PureTech\master\app\server\routes.js:26:11
   at Layer.handle [as handle_request] (C:\Users\PureTech\node_modules\express\lib\router\layer.js:95:5)
   at next (C:\Users\PureTech\node_modules\express\lib\router\route.js:131:13)
   at Route.dispatch (C:\Users\PureTech\node_modules\express\lib\router\route.js:112:3)
   at Layer.handle [as handle_request] (C:\Users\PureTech\node_modules\express\lib\router\layer.js:95:5)
   at C:\Users\PureTech\node_modules\express\lib\router\index.js:277:22
   at Function.process_params (C:\Users\PureTech\node_modules\express\lib\router\index.js:330:12)
   at next (C:\Users\PureTech\node_modules\express\lib\router\index.js:271:10)
   at C:\Users\PureTech\node_modules\express-session\index.js:433:7
   at C:\Users\PureTech\node_modules\connect-mongo\lib\connect-mongo.js:305:11 

这是我正在谈论的代码。它是一个正则表达式,将“text”变量中的特定数字提取到一个数组中。

var text = '[Extracted] id: 194805284, Waxaad $55 ka heshay  MAXAMED  CABDILAAHI JAAMAC SAALAX (252906152669) Tar: 15/04/19 08:44:40, Haraagaagu waa $1,042.7[Extracted] id: 193537533, Waxaad $3 ka heshay  ABDULKADIR  ABDIDAHIR FARAH (907794804) Tar: 14/04/19 10:15:32, Haraagaagu waa $59.17';
var reso = text.replace("$", "");
var textArray = reso.split('[Extracted]');

var regularExpression = new RegExp(/id:\s+([0-9]+).+Waxaad\s+([0-9]+).+[^\(]+\(([0-9]+)\)\s+Tar:\s+([0-9\/\s:]+)/i);
var output = [];
var item;
for(var i = 1; i < textArray.length;  i++){
    item = textArray[i].match(regularExpression);
    output.push({
        id: item[1].trim(),
        amount: item[2].trim(),
        time: item[3].trim(),
        number: item[4].trim()
    });
}

console.log(output);

我希望这个脚本在后端(node.js)上工作,因为它在前端工作。

【问题讨论】:

  • 你不需要new RegExp()/.../ 表示法已经是一个可以使用的正则表达式对象。
  • 另外,当使用字符串时,您需要双重转义 `\`。
  • .split()提取的第二个字符串与正则表达式不匹配。不允许在 3 之前使用 $.replace() 调用仅删除字符串中的 first $,而不是全部。
  • @Axmednuur 是的,这是因为第二次通过循环 .match() 返回 null。这样做是因为正则表达式与第二个字符串不匹配,因为尝试删除 $ 字符只会删除其中一个。它与 Node 无关。
  • var reso = text.replace(/\$/g, "") 将替换所有这些:)

标签: javascript arrays node.js regex express


【解决方案1】:

你必须定义:

var regularExpression = new RegExp("id:\s+([0-9]+).+Waxaad\s+([0-9]+).+[^\(]+\(([0-9]+)\)\s+Tar:\s+([0-9\/\s:]+)", "i");

或者

var regularExpression = /id:\s+([0-9]+).+Waxaad\s+([0-9]+).+[^\(]+\(([0-9]+)\)\s+Tar:\s+([0-9\/\s:]+)/i;

【讨论】:

  • 我试过你的答案。它仍然找不到 item[] 对象。它显示此错误:- TypeError: Cannot read property '1' of null
  • @Axmednuur:因为您的正则表达式与您的字符串不匹配。例如,Waxaad\s+([0-9]+)Waxaad $55 不匹配。在使用item[1] 之前测试item 是否为非空数组。
【解决方案2】:

我发现了问题所在。

  1. 我使用此脚本var reso = text.split('$').join(""); 删除了所有“$”符号
  2. 我删除了新的 RegExp。

然后它运行良好。

【讨论】:

    猜你喜欢
    • 2016-06-27
    • 2021-03-18
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多