我有以下字符串
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];
}
}
和使用
的大括号之间的文字function getSubtitle(text){
let braces = /\((.*)\)/i;
let subtitle = title.match(braces);
if(subtitle){
return subtitle[1];
}
}
我想知道我是否可以使用单个正则表达式从字符串中获取三个值(假设我将其应用于该字符串形状的长列表中)
答案 0 :(得分: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))
答案 1 :(得分:2)
像
这样的东西let partsPattern = /(\d+)\.\s*(.*[^[:space:]])\s*\((.*)\)/
不确定JS是否可以进入POSIX字符集,如果您知道没有任何其他字符串,您可能希望使用\s
代替[:space:]
(甚至空间本身期待的空白)。
这应该捕获相应子匹配内的所有三个部分(数字1,2和3)。
答案 2 :(得分:1)
您可以使用一个功能。如果未找到匹配项,exec()
将返回null
,否则将返回匹配的字符串,然后返回匹配的组。使用id && id[1]
进行检查,以便在找不到匹配项时id
访问id === null
的第二个元素,并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));
,因为第一个元素将是匹配的字符串,它将包含帮助查找匹配的点和空格。
<dependency>
<groupId>it.ozimov</groupId>
<artifactId>spring-boot-email-core</artifactId>
<version>0.5.0</version>
</dependency>
<dependency>
<groupId>it.ozimov</groupId>
<artifactId>spring-boot-freemarker-email</artifactId>
<version>0.5.0</version>
</dependency>
&#13;