如何在node.js中获取字符串的特定部分?

时间:2016-08-20 09:48:11

标签: javascript regex node.js string data-manipulation

我试图用twitter API做些有趣的事情, 我想在Twitter上搜索#np(正在播放)标签并按歌曲名称和艺术家名称分割推文。

让我们假设它发现了这条推文

"听听L.E.L #np发表#SoundCloud"

我想采取歌曲名称,歌曲艺术家并绑定变量。

和推文也可能是这样的

"真棒:D#np Zombie(Leo& Stine Moracchioli的金属封面)https://youtu.be/4e4bAsQ4r30来自@ YouTube"

我在理解正则表达式方面遇到麻烦所以有人可以告诉我一个正确的方法来做这个例子吗?

2 个答案:

答案 0 :(得分:2)

在随机用户输入中几乎找不到任何模式 但是,如果大部分代码都是由某些源代码生成的,那么通常仍然会找到一个匹配的模式。

它可能需要被来源分开 因为它可以更容易地处理捕获组。

var tweetString = "Listen to It Will Happen by L.E.L #np on #SoundCloud";
var myRegexp = /^(.*)(?: by (.*))#\w+.* on #(\w+)$/;
var song = "";
var artists = "";
var messagesource = "";
match = myRegexp.exec(tweetString);
if (match != null) {
  song = match[1];
  artist = match[2];
  messagesource = match[3];
  console.log("song: " + song);
  console.log("artist: " + artist);
  console.log("messagesource: " + messagesource);
}

var tweetString = "just awesome :D #np Zombie (metal cover by Leo & Stine Moracchioli) https://youtu.be/4e4bAsQ4r30 via @YouTube";
var myRegexp = /^.*#\w+ (.*?)\(.* by (.*)\).* via @(\w+)$/;
var song = "";
var artists = "";
var messagesource = "";
match = myRegexp.exec(tweetString);
if (match != null) {
  song = match[1];
  artist = match[2];
  messagesource = match[3];
  console.log("song: " + song);
  console.log("artist: " + artist);
  console.log("messagesource: " + messagesource);
}

答案 1 :(得分:2)

对@LukStorms的解释:

  • ^字符串开头
  • .* .匹配除新行(\n)之外的任何字符。 *表示前一部分应该再多出0次
  • #文字#字符
  • \w+ \w匹配任何字母,大写或小写(或下划线,但通常无关紧要); +表示上一部分(\w)应该在那里一次或多次
  • (.*?)括号环绕捕获组(您可以实际访问)。在这种情况下,该组将匹配
  • \(字面(个字符。 \“逃脱”下​​一个角色,使其变得特别,或使其变得不专业; P
  • .* 0个或更多非换行符
  • by文字文字
  • (.*)包含0个或更多非换行符的捕获组
  • \)文字)
  • .* 0个或更多非换行符
  • via @文字文字
  • (\w+)包含一个或多个字母的捕获组
  • $字符串结尾

希望这会有所帮助。如果你想要解决这种问题,或者正则表达式中的逻辑流程,你可以使用regex101,就像@LukStorms所说的那样。或者我使用的是[regexper](https://regexper.com/#%5E%23%5Cw%2B%20(。%3F)%5C(。%20by%20(。)%5C)。*%20via%20%40(%5CW%2B)%24)。