仅将字符串中的数字匹配一次

时间:2017-07-03 08:44:51

标签: javascript regex match

我有这个代码,但现在我只尝试匹配数字一次。

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”......

谢谢!

3 个答案:

答案 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)否定前瞻。不允许重复

Demo regex

For more reference

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(" "));