2014-11-03 1 views
0

Я хочу вывести строки гласных строки в порядок, поэтому я решил использовать RegEx для этого.Javascript, строка, RegEx, if и else if, console.log другой вывод

Однако, когда я помещаю выражение в другое положение (if и else if), выход отличается для того же выражения. Может ли кто-нибудь объяснить?

function ordered_vowel_word(str) { 

    if(str.match(/[aeiou]{1,}/g) !== ""){ 
    var arr = str.match(/[aeiou]{1,}/g); 
     console.log(arr); 
    } 
    else 
     console.log(str); 
    } 

ordered_vowel_word("bcg"); 
ordered_vowel_word("eebbscao"); 

/* Выход */

ordered_vowel_word ("BCG");

==> нулевой

ordered_vowel_word ("eebbscao");

==> [ "й", "ао"]

Но если я перестраивать выражение,

function ordered_vowel_word(str) { 

    if(str.match(/[^aeiou]/) !== "") 
     console.log(str); 
    else if(str.match(/[aeiou]{1,}/g) !== ""){ 
    var arr = str.match(/[aeiou]{1,}/g); 
     console.log(arr); 
    } 
} 

Вывод будет

ordered_vowel_word ("BCG");

==> BGV

ordered_vowel_word ("eebbscao");

==> eebbscao

+1

Что на самом деле вас удивляет? Оба ваших входа удовлетворяют первому условию 'if' – zerkms

ответ

1

Возвращаемое значение str.match, как вы используете это массив, содержащий матчи, когда он совпадает. Кроме того, это не пустая строка, когда нет совпадений ... она фактически равна нулю.

Попробуйте изменить то, что вы проверяете для в вашем случае условие это:

str.match(/[aeiou]{1,}/g) !== null) 
+0

Check' [] == [] ':-) – zerkms

+0

Следующая проблема: это не' null' в случае OP – zerkms

+0

Я изменил на null, и он запустился, как я предполагал, что OP ожидается. Это [] == [] довольно странно, спасибо, что указали, что вне – jvanstry

1

Примите к сведению, что string.match возвращает массива, если есть хотя бы один матч, и он возвращает нуля если есть не соответствует.

То, что я думаю, что вы хотите:

if(str.match(/[aeiou]{1,}/g) == null){ // no matches

или

if(str.match(/[aeiou]{1,}/g) != null){ //has a match

Что касается сортировки, вы должны сделать процессу массив, который вы получаете с str.match.

Отъезд this SO answer для сортировки массивов. Да, вы можете использовать > и < операторов для символов.