【问题标题】:How to get specific part of a string in node.js?如何在 node.js 中获取字符串的特定部分?
【发布时间】:2016-08-20 09:48:11
【问题描述】:

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

假设它找到了这条推文

“L.E.L #np 在#SoundCloud 上聆听它会发生”

我想获取歌曲名称、歌曲艺术家并绑定到变量。

tweet 也可以是这样的

“太棒了:D #np Zombie(Leo 和 Stine Moracchioli 的金属封面)https://youtu.be/4e4bAsQ4r30@YouTube”

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

【问题讨论】:

  • 除非有明确的格式在起作用,否则很难解析出来。特别是如果同一推文中有其他常规文本。因此,如果“Listen(ing) to”只是文本,你想忽略它。如果“It Will Happen”是曲目标题,您想抓住它。但是您如何区分曲目名称和任何其他文本?这只是一个示例,但这应该让您了解它的难度。
  • 如果您对此类推文的“外观”有一定的控制权,那么我们可以找出从中解析事物的方法。例如,{track title} by {artist} #np 会更容易识别,因为这些部分已用大括号标记。但是,如果没有更明确的结构,很难提供更具体的帮助。对不起。
  • 如果您对正则表达式及其功能有更具体的问题,我很乐意为您提供帮助。
  • 是的 除非您按详细选项搜索并排除其余选项,否则很难在随机用户输入中找到模式,大多数人直接在 soundcloud 或 youtube 中分享而不加评论,这意味着他们中的大多数人都有一种常见的方式,twitter 为我们提供了详细搜索的能力。

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


【解决方案1】:

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

可能需要按来源分开。
因为它使处理捕获组变得更容易。

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

【讨论】:

  • 非常感谢,是的,除非您通过详细选项搜索并排除其余选项,否则很难在随机用户输入中找到模式,这是答案,顺便说一下我仍然遇到问题理解正则表达式你能给我一个详细的资料来源吗? :)
  • regular-expressions.info 经常被推荐。为了试验 javascript 中使用的正则表达式风格,我推荐 regexr.com,它也有很好的参考,并附有示例。为了试验 PCRE 风格 regex101 在 stackoverflow 上经常使用来展示示例。
【解决方案2】:

@LukStorms 的解释:

  • ^ 字符串开头
  • .* . 匹配除换行符 (\n) 之外的任何字符。 * 表示前一部分应该再出现 0 次
  • # 文字 # 字符
  • \w+ \w 匹配任何字母,大写或小写(或下划线,但这通常无关紧要); + 表示前一部分 (\w) 应该出现 1 次或多次
  • (.*?) 括号环绕着一个捕获组(您实际上可以访问)。在这种情况下,组将匹配
  • \( 文字 ( 字符。 \“转义”下一个字符,将其变为特殊,或使其不特殊;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)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 2018-04-27
    相关资源
    最近更新 更多