[英]Javascript Regex match text between tildes
我觉得自己是个白痴,因为我花了很长时间试图找到一个可以使用的正则表达式。
字串: ~05276~^~0500~^~Turkey...
...表示后面可以有无限多个字符。 我要的是没有波浪号的第一个波浪号定界数字。 我正在尝试从文本文件中提取一些数据,如果可以理解该方法,我想可以弄清楚其余的数据。
这是我的正则表达式: /^~([\\d]+)~/
这就是我得到的:
[ '~05276~',
'05276',
index: 0,
input: '~05276~^~0500~^~Turkey...' ]
当我使用g运算符( /^~([\\d]+)~/g
)时,我只能得到~05276~
,而我想要的是05726
(无波浪号)。
我发现了一些不同的帖子和资源,但是我似乎无法弄清为什么它没有按我期望的那样工作。 这是我发现的:
JavaScript / NodeJS能够做到这一点吗?
编辑:
这是我的代码:
lineReader.eachLine(file, function (line) {
var entry = {};
entry.id = line.match(/^~([\d]+)~/);
console.log(entry);
});
lineReader正常工作,并返回类似于上面示例字符串中的一行。
您的正则表达式(几乎)很好,但是您可能没有正确使用它。 如果我想要一个数字数组,这就是我要做的事情:
var array = [];
yourString.replace(/~(\d+)~/g, function(_, n) { array.push(n); });
您真正不需要的是领先的“ ^”锚点。
您只需要正则表达式/\\d+/
即可匹配示例中波浪号后的第一个数字。 您的方法将是:
lineReader.eachLine(file, function (line) {
var entry = {};
entry.id = line.match(/\d+/);
console.log(entry);
});
输入"~05276~^~0500~^~Turkey"
,将得到结果"05276"
。
关于获得的数组答案,是因为您有括号,即捕获组。 如果是匹配的组,则从最左括号开始(\\d+)
在您的情况下为(\\d+)
将驻留在结果数组的第二个插槽中。 第一个插槽具有完全匹配项,在您的情况下,其中包括波浪号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.