Javascript正则表达式匹配tildes之间的文本

时间:2011-03-26 20:46:29

标签: javascript regex node.js serverside-javascript

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

字符串:~05276~^~0500~^~Turkey...

...意味着之后可以有无限数量的字符。我想要的是没有波浪号的第一个波浪号分隔号码。我正试图从文本文件中提取一些数据,我认为如果我能理解如何做到这一点,我可以解决其余的问题。

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

这就是我得到的:

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

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

我发现了一些不同的帖子和资源,但我似乎无法弄清楚为什么这不符合我的预期。这是我发现的:

Javascript regex - how to get text between curly brackets

JavaScript / NodeJS能够做到这一点吗?

编辑:

这是我的代码:

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

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

    console.log(entry);
});

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

您只需要正则表达式/\d+/以匹配示例中代字号后面的第一个数字。那么你的方法就是:

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

使用输入"~05276~^~0500~^~Turkey",您将获得结果"05276"

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