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)?