0

我觉得自己像个白痴,因为我花了很长时间试图找到一个可行的正则表达式。

细绳:~05276~^~0500~^~Turkey...

... 表示后面可以有无限数量的字符。我想要的是第一个没有波浪号的波浪号分隔的数字。我正在尝试从文本文件中提取一些数据,我认为如果我能理解如何做到这一点,我可以弄清楚其余的。

这是我的正则表达式:/^~([\d]+)~/

这就是我得到的:

[ '~05276~',
 '05276',
 index: 0,
 input: '~05276~^~0500~^~Turkey...' ]

当我使用 g 运算符 ( /^~([\d]+)~/g) 时,我只得到~05276~,而我想要的是05726(没有波浪号)。

我找到了一些不同的帖子和资源,但我似乎无法弄清楚为什么这不能像我预期的那样工作。这是我发现的:

Javascript regex - 如何在大括号之间获取文本

JavaScript/NodeJS 能做到这一点吗?

编辑:

这是我的代码:

lineReader.eachLine(file, function (line) {
    var entry = {};

    entry.id = line.match(/^~([\d]+)~/);

    console.log(entry);
});

lineReader 工作正常并返回一行,如我上面的示例字符串。

4

2 回答 2

2

你的正则表达式(几乎)很好,但你可能没有正确使用它。如果我想要一个数字数组,我会这样做:

 var array = [];
 yourString.replace(/~(\d+)~/g, function(_, n) { array.push(n); });

你真正不需要的是那个领先的“^”锚。

于 2011-03-26T20:48:44.957 回答
1

您只需要正则表达式/\d+/即可匹配示例中波浪号之后的第一个数字。您的方法将是:

lineReader.eachLine(file, function (line) {
    var entry = {};
    entry.id = line.match(/\d+/);
    console.log(entry);
});

通过输入"~05276~^~0500~^~Turkey",您将得到结果"05276"

关于你得到的数组答案,这是因为你有括号,即一个捕获组。如果它与捕获的组匹配,则从最左边的括号开始 -(\d+)在您的情况下 - 将驻留在结果数组的第二个插槽中。第一个插槽具有完整匹配,在您的情况下包括波浪号。

于 2011-03-26T22:17:18.397 回答