【发布时间】: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