2016-05-20 3 views
0

Я имею массив со строкой:Как найти строку соответствия с отсутствующей буквой?

var dict =["johndoe","johnrte","jahnaoi"]; 

Я хочу сделать функцию (с регулярным выражением или другими), чтобы проверить, если «ул» с отсутствующей буквой подходит один из его пункта. Пропущенная буква представлена ​​символом «#». Предположим, что строка с отсутствующей буквой - «j # hn # oe». Я начал так, но я думаю, что не пойду правильно.

 function Checkword(str) { 
     // Check were is the # 
     var indices = [0] 
     for (var i = 0; i < str.length; i++) { 
      if (str[i] === "#") indices.push(i); 
     } 
     var regexel = "/^"; 

     for (var index = 0; index < indices.length; index++) { 
      regexel.concat(str.substring(indices[index - 1], indices[index])); 
      regexel.concat("[a-z]"); 

     } 
     regexel.concat("$/"); 
     var reg = new Regex(regexel); 

     for (r = 0; r < dict.length; i++) { 
      if (reg.test(dict[r]) { 
        console.log(dict[r]); 
      } 

     } 


    } 
    Checkword("j#hn#oe"); 

В этом случае он возвращает первый и последний элемент.

*** Редактировать после комментария:

Какое слово должно пройти мой тест:

If str is j#hndo#=> dict[0], dict[2]. 
If str is j####### => dict[0], dict[1], dict[2]; 
IF str is Jonh#oe=> dict[0] 
if str is a#ze#ts=> nothing. 
+3

звучит как вопрос интервью – Soren

+0

Можете ли вы уточнить, что речь идет? –

+0

, так что буквы отсутствуют в первом и последнем элементах, которые есть у второго? '#' без разницы. – sweaver2112

ответ

1

Благодаря замечанием, это ответ, который намного проще, чем ожидалось. Спасибо!

var dict =["johndoe","johnrte","jahnaoi"]; 

var dict =["johndoe","johnrte","jahnaoi"]; 

function ismissing(str){ 

    while(str.indexOf("#")>0){ 
     str=str.replace('#', '[a-z]{1}'); 
} 

    var reg=new RegExp(str); 
    console.log(reg); 

    for(i=0;i<dict.length;i++){ 

     if(reg.test(dict[i])) 
      {console.log(dict[i])}; 
} 


} 
ismissing("j#hn#o#"); 

выход =>

/j[a-z]{1}hn[a-z]{1}o[a-z]{1}/ 
johndoe 
jahnaoi 
undefined 
+0

Основываясь на моем понимании вопроса, я бы, вероятно, сделал это 'str = str .replace ('#', '[az] {1}'); ' – atheaos

+0

почти то же самое, не так ли? – Sulot

+0

Нет, с'. *? 'вы бы соответствовали 'johndoe', а также 'joooooohndddddoe' , 'joasfdsdfhnasdfdsoe' и 'jhnoe'. Также '[az]' был использован шаблон OP. – atheaos

Смежные вопросы