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

Javascript正则表达式匹配tildes之间的文本,javascript,regex,node.js,serverside-javascript,Javascript,Regex,Node.js,Serverside Javascript,我觉得自己像个白痴,因为我花了很长时间试图找到一个有效的正则表达式 字符串:~05276~^~0500~^~土耳其… 这个。。。意味着后面可以有无限个字符。我想要的是第一个没有波浪号的波浪号分隔的数字。我试着从一个文本文件中提取一些数据,如果我能理解怎么做,我想我可以找出其余的数据 这是我的正则表达式:/^([\d]+)~/ 这就是我得到的: [ '~05276~', '05276', index: 0, input: '~05276~^~0500~^~Turkey...' ] 当我使用

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

字符串:
~05276~^~0500~^~土耳其…

这个。。。意味着后面可以有无限个字符。我想要的是第一个没有波浪号的波浪号分隔的数字。我试着从一个文本文件中提取一些数据,如果我能理解怎么做,我想我可以找出其余的数据

这是我的正则表达式:
/^([\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); });
您真正不需要的是引导的“^”锚。

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

 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+)
(在本例中)将驻留在结果数组的第二个插槽中。第一个插槽具有完全匹配,在您的示例中,它包括tilde。

您只需要正则表达式
/\d+/
,就可以匹配示例中tilde之后的第一个数字。你的方法是:

lineReader.eachLine(file, function (line) {
    var entry = {};
    entry.id = line.match(/\d+/);
    console.log(entry);
});
通过输入
“~05276~^~0500~^~Turkey”
您将得到结果
“05276”


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

我不想要数组,我只想要第一个。我会把我的密码放上去,你只想要第一个?但是你已经在你发布的结果中得到了第一个。。。我就是不明白。如果你只想要第一个,那么“g”修饰符显然是不必要的。好吧,使用“g”修饰符,我得到一个由波浪线包围的字符串。我不想要瓷砖,只要号码。我想我可以使用子字符串或其他方法来修剪它们,但我想通过正则表达式找到一种方法。你真的应该检查你得到的数组是否有第一个元素
m[0]
,它保存了整个mattch(包括波浪线),下一个元素
m[1]
包含了第一个捕获组的内容,这就是你想要的。我不想要数组,我只想要第一个。我会把我的密码放上去,你只想要第一个?但是你已经在你发布的结果中得到了第一个。。。我就是不明白。如果你只想要第一个,那么“g”修饰符显然是不必要的。好吧,使用“g”修饰符,我得到一个由波浪线包围的字符串。我不想要瓷砖,只要号码。我想我可以使用子字符串或其他方法来修剪它们,但我想通过正则表达式找到一种方法。你真的应该检查你得到的数组是否有第一个元素
m[0]
,它保存了整个mattch(包括波浪线),下一个元素
m[1]
包含了第一个捕获组的内容,这就是你想要的。试着丢掉“^”。您应该获得一个由“~”分隔的整数值数组。“match()”函数返回一个基于匹配的数组。检查文档!!我不介意得到一个数组,但是为什么我在第一个数组中得到两个几乎相同的结果(没有g)?试着去掉“^”。您应该获得一个由“~”分隔的整数值数组。“match()”函数返回一个基于匹配的数组。检查文档!!我不介意得到一个数组,但是为什么我在第一个数组中得到两个几乎相同的结果(没有g)?