2014-11-03 84 views
0

我想按順序輸出一個字符串的元音,所以我決定使用RegEx來做到這一點。但是,當我將表達式放在(if和else if)中的不同位置時,輸出對於同一個表達式而言是不同的。誰能解釋一下?Javascript,string,RegEx,if和else if,console.log不同的輸出

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」);

==> [ 「EE」, 「AO」]

但是,如果我重組表達,

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 2014-11-03 07:46:48

回答

1

的str.match您正在使用它的方式返回值是包含匹配它匹配時的陣列。而且,當沒有匹配時它不是空字符串......它實際上是空的。

試着改變你正在爲測試你如果條件是:

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

檢查'[] == []':-) – zerkms 2014-11-03 07:52:37

+0

下一個問題:在OP的情況下它不是'空' – zerkms 2014-11-03 07:53:54

+0

我改變爲空,它運行,因爲我期望OP的預期。 [] == []是非常奇怪的,謝謝指出, – jvanstry 2014-11-03 07:55:54

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排序數組。是的,您可以使用><運算符來表示字符。