2017-02-27 257 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))

相关问题