我觉得自己像个白痴,因为我花了很长时间试图找到一个可行的正则表达式。
字符串:~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工作正常并返回一行,就像上面的示例字符串一样。
答案 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+)
- 将驻留在结果数组的第二个槽中。第一个插槽具有完全匹配,在您的情况下包括波浪号。