匹配并从javascript

时间:2018-10-29 10:00:34

标签: javascript angular typescript

我有类似的输入

x = "+91458888888"

并与给定的国家/地区代码数组匹配的是y = ["+91","+92","+923","+912"]

输出应为z = "458888888"z1 = "+91"否则为false

我不知道继续进行此问题的第一步,任何帮助和建议。谢谢

5 个答案:

答案 0 :(得分:1)

如果可能的话,请避免在数组项中使用“ +”号,这将使解决方案更加简便。

第1步:按降序对数组进行排序,这将消除获得部分匹配的机会

第2步:形成正则表达式并进行匹配

第3步:返回结果

var data = [91,92,923,912];
data.sort((a,b)=>b-a);
var match = new RegExp('^\\+('+y.join("|")+')(.*)?$');
var ph = "+95458888888".match(match);
if(ph) {
  //return ph[2]
  console.log(ph[2]);
} else {
  //return false;
}

如果无法更改Array y的结构,则可以使用map方法或通过迭代将数组转换为给定格式。

答案 1 :(得分:0)

尝试以下代码:

for i= 0 to CatPan->ControlCount-1 do CatPan[i].Height;

答案 2 :(得分:0)

尝试一下:

var z;
var y = ["+91","+92","+923","+912"];
var x = "+91458888888";

// Sort based on length
y.sort(function(a, b){
   return a.length - b.length;
});

y.forEach(code => {
  if(x.indexOf(code) >= 0)
    z = x.replace(code , '')
});

console.log(z)

答案 3 :(得分:0)

如果号码长度(没有国家代码)是固定的,则最简单的方法:

let x = "+91458888888";
const result = x.substr(x.length - 9); // '9' was length of the real nubmer 
console.log(result);

否则,像其他锚一样使用正则表达式。

答案 4 :(得分:-1)

stackblitz:https://stackblitz.com/edit/angular-modvbu

var data = ["+1684","+92","+923","+912"];
var match = "+168402443432424";

let count=-1;
var finalOutput;

  if (data.some(v => { return match.indexOf(v) >= 0; })) {
        data.some(v => { 
        count=count+1;
        if(match.indexOf(v) >= 0)
        {
           finalOutput = match.replace(data[count],''); 
           return true;
        }else{
        return false;
        }
       });
  }
 
console.log(finalOutput);