2012-03-18 33 views
1

我需要JavaScript中正則表達式的幫助(對不起,我還在試着學習它)。JavaScript正則表達式三部分

我有字符串:value1 value2 (value3 value4) -value5 value6 (可以在每個三個部分組成無限值)

,我需要分開:

var1 = value1 + ' ' + value2 ... 
var2 = value3 + ' ' + value4 ... 
var3 = value5 + ' ' + value6 ... 

你能幫助我?謝謝!

+0

  • $結束時,你可以給一個較長的輸入和預期輸出的例子嗎? – Dogbert 2012-03-18 13:47:51

  • 回答

    2

    拆分可能是一個想法,如果字符串的格式保持像給定的格式:

    'value1 value2 (value3 value4) -value5 value6'.split(/\s+\(|\)\s+\-/); 
    //=> ["value1 value2", "value3 value4", "value5 value6"] 
    
    +0

    太棒了!但是第一個值在字符串的末尾有一個空格。任何想法? jQuery.trim()? – 2012-03-18 14:13:27

    +0

    嗨Caio,很高興我能幫到你。我已經編輯了答案,分裂現在也刪除了空間。 – KooiInc 2012-03-19 06:00:40

    1

    由於原始字符串已經包含了這些空間分隔符,請嘗試:

    /^(.*) \((.*)\) -(.*)$/.exec(str); 
    

    它的字符串匹配"anything (anything) -anything"

    它返回一個數組,其中arr[1],arr[2]arr[3]包含三個結果。

    但請注意,不允許在這些值中包含特殊字符(如(-帶有空格前綴),否則該格式不是真正可定義的。

    1
    var str1 = "value1 value2 (value3 value4) -value5 value6"; 
    
    //var parts = str1.match(/^([^(]+)\(\s?([^)]+)\)\s?(.+)$/); 
    var parts = str1.match(/^([^(]+)\(\s?([^)]+)\)\s?-(.+)$/); 
    
    var var1 = parts[1]; 
    var var2 = parts[2]; 
    var var3 = parts[3]; 
    
    console.log(var1); 
    console.log(var2); 
    console.log(var3); 
    
    +0

    我想你可能需要包括破折號。 – pimvdb 2012-03-18 13:54:33

    +0

    認爲它是一個負面的聲音..大聲笑 – epascarello 2012-03-18 13:57:17

    1

    我會去先找到每一部分,然後分裂在每個值更高的效率。然後我會用一個空格將它們粘在一起。我用了很多\s*'es,因爲我假設可能有多個空格(例如註釋行中的那些空格)。正則表達式的

    var str = 'value1 value2 (value3 value4) -value5 value6'; 
    //var str = ' value1 value2 ( value3 value4) -value5 value6 '; 
    
    var pairs = str.match(/^\s*(.+?)\s*\(\s*(.+?)\s*\)\s*(.+?)\s*$/); 
    
    values1 = pairs[1].split(/\s+/); 
    values2 = pairs[2].split(/\s+/); 
    values3 = pairs[3].split(/\s+/); 
    
    console.log('values1:',values1,'-->',values1.join(' ')); 
    console.log('values2:',values2,'-->',values2.join(' ')); 
    console.log('values3:',values3,'-->',values3.join(' ')); 
    

    說明

    • ^串的開頭
    • \s*可能的空的空間
    • (.+?)一個字符組(至少1個字符)
    • \s*可能的空的空間
    • \(開口括號
    • \s*可能的空的空間
    • (.+?)一個字符組(至少1個字符)
    • \s*可能的空的空間
    • \)閉括號
    • \s*可能的空的空間
    • (.+?)一個字符組(至少1個字符)
    • \s*可能爲空字符串的空間