我有这个代码,但现在我只尝试匹配数字一次。
var text = "91308543 v1_Printer 91308543 v2 91503362 v1_Printer";
var regex = /9\d{7}/g;
var result = text.match(regex);
var pos0 = result[0];
var pos1 = result[1];
var pos2 = result[2];
return(pos0 + " " + pos1 + " " + pos2);
结果是:91308543 91308543 91503362
我想要的结果:91308543 91503362
可以在我的正则表达式中添加一些内容,以便它不会显示重复的值吗? 我不喜欢使用Arrays,因为在这种情况下我需要使用Native Arrays ...
我还有第二个问题,有可能自动创建变量“pos0”,“pos1”......
谢谢!
答案 0 :(得分:0)
您可以在匹配后filter删除重复项,并使用destructuring assingment分配给各个变量:
let text = "91308543 v1_Printer 91308543 v2 91503362 v1_Printer";
let regex = /9\d{7}/g;
let [pos0, pos1, pos2] = text.match(regex).filter((v, i, a) => a.indexOf(v) === i);
console.log(pos0);
console.log(pos1);
console.log(pos2);

答案 1 :(得分:0)
尝试此模式(9\d{7})(?!.*\1)
否定前瞻。不允许重复
var text = "91308543 v1_Printer 91308543 v2 91503362 v1_Printer";
var regex = /(9\d{7})(?!.*\1)/g;
var result = text.match(regex);
console.log(result)
答案 2 :(得分:0)
你正在寻找的正则表达式是
(9\d{7})\b(?!.*\1\b)
它使用negative lookahead。请参阅demo。
第二点可以通过eval
实现:
var result = text.match(regex);
for (var i = 0; i < result.length; i++){
eval('var pos' + i + ' = "' + result[i] + '"');
}
但这对返回语句没有帮助。
你应该使用:
return(result.join(" "));