2017-02-27 110 views
-2

我有以下字符串正則表達式將字符串分割成多個部分

133. Alarm (Peep peep)

我的目標是使用正則表達式來分割字符串成3個部分,並將其存儲作爲JSON對象,像

{ 
    "id": "133", 
    "Title": "Alarm", 
    "Subtitle": "Peep peep" 
} 

我可以使用

function getID(text){ 
    let numberPattern = /\d+/g; 
    let id = title.match(numberPattern); 
    if(id){ 
    return id[0]; 
    } 
} 

和大括號之間的文字u唱

function getSubtitle(text){ 
    let braces = /\((.*)\)/i; 
    let subtitle = title.match(braces); 
    if(subtitle){ 
    return subtitle[1]; 
    } 
} 

我想知道如果我可以使用一個正則表達式獲取字符串中的三個值(假設我將它應用於該字符串形狀的長長的名單上)

回答

1

你可以使用一個功能。如果找不到匹配,exec()將返回null,否則它將返回匹配的字符串,然後是匹配的組。使用id && id[1]進行檢查,以便在未找到匹配項時和id === null時不訪問第二個元素id

第二個元素用於id[1]而不是id[0],因爲第一個元素將是匹配的字符串,它將包含幫助查找匹配的點和空白。

var str = "133. Alarm (Peep peep)"; 
 

 
function getData(str) { 
 
    var id = (/(\d+)\./).exec(str); 
 
    var title = (/\s+(.+)\s+\(/).exec(str); 
 
    var subtitle = (/\((.+)\)/).exec(str); 
 

 
    return { 
 
    "id": id && id[1], 
 
    "Title": title && title[1], 
 
    "Subtitle": subtitle && subtitle[1] 
 
    }; 
 
} 
 

 
console.log(getData(str));

+0

在某些情況下,它的工作原理,在別人我得到冠軍'{ID無效:' 1',標題:null,小標題:'The Opening Chapter'}' –

+0

我編輯了它。它現在工作嗎?另外,你用來產生錯誤結果的字符串是什麼? –

+0

它做了工作謝謝你 –

2

喜歡的東西

let partsPattern = /(\d+)\.\s*(.*[^[:space:]])\s*\((.*)\)/ 

不知道JS能爲POSIX字符集,你可能需要使用\s而不是[:space:](甚至是空間本身,如果你知道,有沒有預期任何其他空格)。

這應該捕獲各自子匹配(數字1,2和3)內的所有三個部分。

+0

是保換'[:空間:]'和'\ s'工作,你是真棒 –

3

你可以這樣做:

const data = '133. Alarm (Peep peep)' 
 

 
const getInfo = data => { 
 
    let [,id, title, subtitle] = data.match(/(\d+)\.\s*(.*?)\s*\((.*?)\)/) 
 
    return { id, title, subtitle } 
 
} 
 

 
console.log(getInfo(data))

相關問題