正则表达式将字符串分割成多个部分
问题描述:
我有以下字符串正则表达式将字符串分割成多个部分
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];
}
}
我想知道如果我可以使用一个正则表达式获取字符串中的三个值(假设我将它应用于该字符串形状的长长的名单上)
答
你可以使用一个功能。如果找不到匹配,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));
答
喜欢的东西
let partsPattern = /(\d+)\.\s*(.*[^[:space:]])\s*\((.*)\)/
不知道JS能为POSIX字符集,你可能需要使用\s
而不是[:space:]
(甚至是空间本身,如果你知道,有没有预期任何其他空格)。
这应该捕获各自子匹配(数字1,2和3)内的所有三个部分。
+0
是保换'[:空间:]'和'\ s'工作,你是真棒 –
答
你可以这样做:
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))
在某些情况下,它的工作原理,在别人我得到冠军'{ID无效:' 1',标题:null,小标题:'The Opening Chapter'}' –
我编辑了它。它现在工作吗?另外,你用来产生错误结果的字符串是什么? –
它做了工作谢谢你 –