正则表达式将字符串拆分为多个部分

时间:2017-02-27 21:21:49

标签: javascript regex

我有以下字符串

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];
  }
}

我想知道我是否可以使用单个正则表达式从字符串中获取三个值(假设我将其应用于该字符串形状的长列表中)

3 个答案:

答案 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;
&#13;
&#13;