繁体   English   中英

Javascript正则表达式在波浪号之间匹配文本

[英]Javascript Regex match text between tildes

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

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

...表示后面可以有无限多个字符。 我要的是没有波浪号的第一个波浪号定界数字。 我正在尝试从文本文件中提取一些数据,如果可以理解该方法,我想可以弄清楚其余的数据。

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

这就是我得到的:

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

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

我发现了一些不同的帖子和资源,但是我似乎无法弄清为什么它没有按我期望的那样工作。 这是我发现的:

Javascript正则表达式-如何在大括号之间获取文本

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM