从字符串中提取信息

时间:2015-12-04 17:41:44

标签: javascript regex node.js match

所以我得到了这个字符串

G-Eazy - The track title (Mr. Awesome Remix) (Official Video)

现在我想提取艺术家,歌曲名称,混音等信息,并忽略官方视频的信息。

这意味着我只是假设第一部分是艺术家的名字后跟空格和减号以及空格。然后我想检索第一个括号的内容并忽略包含"官方"等词的所有括号。等等...

使用正则表达式有没有办法做到这一点?

3 个答案:

答案 0 :(得分:2)

表达式/^(.+?)\s+\-\s+(.+?)\s*\((.+?)\)/似乎按预期工作。

Example Here

var string = 'G-Eazy - The track title (Mr. Awesome Remix) (Official Video)';
var matches = string.match(/^(.+?)\s+\-\s+(.+?)\s*\((.+?)\)/);

document.querySelector('pre').textContent =
  'Artist: ' + matches[1] 
+ ' \nTitle: ' + matches[2]
+ '\nRemix: ' + matches[3];
<pre></pre>

输出:

  

艺术家:G-Eazy

     

标题:曲目标题

     

混音:Awesome Remix先生

答案 1 :(得分:1)

如果您在如何匹配将艺术家与曲目名称分开的-而不匹配艺术家名称中的-,那么诀窍就是匹配([^ ]| [^-])+之类的内容。 1}}表示艺术家姓名。这将反复匹配“除了空间之外的任何东西,或者没有后跟破折号的空间”。显然,我们也想支持艺术家名称中的空格。

对于整个表达式,这样的事情应该有效:

var str = 'G-Eazy - The track title (Mr. Awesome Remix) (Official Video)'
var re = /^((?:[^ ]| [^- ])+) - ([^(]+)(?:\(([^)]+)[Rr]emix\))?/;
var m  = str.match(re); 
console.log('Artist: ' + m[1]);
console.log('Tack  : ' + m[2]);
console.log('Remix : ' + m[3]);

答案 2 :(得分:0)

根据是否所有数据都是预期的类似格式,您可以使用字符串标记方法.split()来完成。

var string = "G-Eazy - The track title (Mr. Awesome Remix) (Official Video)";

var artist = string.split('-')[0];
alert(artist); // "G-Eazy "
var title = string.split('-')[1].split('(Official')[0];
alert(title); // " The track title (Mr. Awesome Remix) ";

artist = artist.trim();
title = title.trim();

alert(artist + " - " + title); // "G-Eazy - The track title (Mr. Awesome Remix)"