正则表达式:如何返回需要不同正则表达式的匹配数组?

时间:2017-07-06 10:06:47

标签: javascript regex

我必须转换json文件中的txt文件,所以我使用正则表达式来解析不同类型的数据。我想记录名字,姓氏,生日等数据。

数据的格式如下:

/Indicator /
/[A-Z][a-z]+ /
/[A-Z][a-z]+ /
/[0-9]{2}\/[0-9]{2}\/[0-9]{4}/

更具体的例子:

Indicator Tom Smith 01/01/2001

所以我知道我的信息在哪里开始(它始终以“指标”开头),然后是第一个名字,然后是姓氏,然后是生日,我也知道用于这些类型的数据的正则表达式是什么但不是如何一起实现它们。

这就是我现在所做的,我怀疑它是最佳的还是推荐的:

let first_name = "";
let last_name = "";
let birthday = "";
let j = 10; // Length of "Indicator "
let regex = /Indicator /;
let match = regex.exec(data);

j += match.index;
while (data[j] !== ' ')
    first_name += data[j++];
j++;
while (data[j] !== ' ')
    last_name += data[j++];
j++;
while (data[j] !== '<')
    birthday += data[j++];
console.log(first_name);
console.log(last_name);
console.log(birthday);

我的问题是,我应该使用什么正则表达式来获取数组['Tom','Smith','01 / 01/2001']并执行一次regex.exec?

2 个答案:

答案 0 :(得分:1)

第一个问题是为什么要使用正则表达式?

我的建议: 您可以直接转到str.split(" "),这将返回[&#39;指标&#39;,&#39; Tom&#39;,&#39; Smith&#39;,&#39; 01 / 01/2001&#39;]你可以随意处理。

对于包含此类数据的大文件,您可以这样做:

Indicator Tom Smith 01/01/2001 Indicator xyz abc 11/02/2002

你会做这样的事情:

var str = "Indicator Tom Smith 01/01/2001 Indicator xyz abc 11/02/2002";
var strArray = str.splice(" ");
var 
for(var i = 0; i < strArray.length;i++){
   if(strArray[i] === 'Indicator'){
   var firstname = strArray[i+1];
   var lastname = strArray[i+2];
   var dob = strArray[i+3];
   //use them as you want
   i += 2; 
  }
} 

答案 1 :(得分:0)

正如Dhaval Chaudhary在回答中所说,在这种情况下,你甚至不需要使用正则表达式。

但是,让我们说你想这样做(可能是因为条目更复杂,你在单词之间有不止一种字符,我不知道)。

然后,如果您知道每个条目中元素的顺序,那么一个简单的方法就是

line="string1<element1>string2<element2>...stringN<elementN>"
strArray = line.match(/(regex1)|(regex2)|...|(regexM)/g)

其中每个regexI可以匹配多个元素(因此M可能与N不同)。

在你的简单例子中,它会是这样的:

line="Indicator Tom Smith 01/01/2001" /* four elements */
strArray = line.match(/(Indicator)|([A-Z][a-z]*)|([0-9]{2}\/[0-9]{2}\/[0-9]{4})/g)  /* three regexes */
console.log(strArray)

打印

  

数组[&#34;指标&#34;,&#34;汤姆&#34;,&#34;史密斯&#34;,&#34; 01/01 / 2001&#34; ]