仅当元素不以'('

时间:2015-02-15 04:39:46

标签: javascript regex

我有一个使用歌曲标题作为字符串的应用。其中一个问题是一些歌曲标题包括艺术家的名字和他们的混音。例如:

RAC - Lana Del Rey Blue Jeans (RAC Mix)

我最终希望字符串看起来像这样:

Lana Del Rey Blue Jeans (RAC Mix)

我知道我可以做一个简单的String.replace('-','')删除破折号,但我想知道是否有人可以帮助我使用正则表达式来删除艺术家名称只有他们不在&# 39; t以 (开头。我想保留(RAC Mix)

我对正则表达式很新,我很难搞清楚这一点。我一直在https://regex101.com/#javascript上玩,但没有运气。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

如果您愿意,可以完全避免RegExp。这是另一种看待它的方式:



function stripArtist(str) {
  var i = str.indexOf('-');

  //assumes there is a space after "-"
  if (~i) {
    return str.slice(i + 1);
  } else {
    return str;
  }
}

var div = document.getElementById('song');
div.innerHTML = stripArtist(div.innerHTML);

<div>RAC - Lana Del Rey Blue Jeans (RAC Mix)</div>
<div id="song">RAC - Lana Del Rey Blue Jeans (RAC Mix)</div>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您可以使用以下正则表达式删除主要艺术家名称(假设艺术家名称首先出现,并通过-与标题分开):

/^[^-]+-\s*/

'RAC - Lana Del Rey Blue Jeans (RAC Mix)'.replace(/^[^-]+-\s*/, '')
// => "Lana Del Rey Blue Jeans (RAC Mix)"

编辑:

我正在使用此正则表达式/RAC[^-]-+\s*/。正则表达式的第一部分在我的代码中是可变的,因此适用于其他歌曲标题,例如:

var artistname = 'coldplay';
var re = new RegEx(artistname + '[^-]-+\\s*');
'Coldplay - Yellow (Coldplay Mix)'.replace(re, '');
# => 'Yellow (Coldplay Mix)'