gpt4 book ai didi

javascript - 正则表达式 - 子表达式 - IMDB

转载 作者:行者123 更新时间:2023-11-29 10:46:24 25 4
gpt4 key购买 nike

我正在尝试使用正则表达式来标记我从 IMDB 的文本界面下载的电影片名。

RE 的简化版本将演示我遇到的问题。这是一个示例标题:

"'Allo 'Allo!" (1982)
"A film in production" (????)

我可以这样匹配:

re=/(\".*\")\s(\(.{4}\));

然后我可以使用子表达式在 javascript 中标记电影,就像这样:

titleParts = rawTitle.match(re);
console.log('title %s', titleParts[0]);

但后来我发现了这样的电影片名:

Unquoted film title  (2012)

因为标题两边没有引号,我无法再将元素匹配到子表达式中:

re=/((\"){0,1}.*(\"){0,1})\s(\(.{4}\));

请注意,我通过指定引号是可选的来更改原始 RE。但是现在发生的是整个字符串匹配第一个子表达式。

我该如何解决这个问题?

最佳答案

您的标题实际上在索引 1 而非 0 处可用。

console.log('title %s', titleParts[1]); // "title Unquoted film title "

您不应在标题周围使用引号和空格。这将导致标题显示不一致:有时引用,有时不引用;或者,将需要不必要且应避免的字符串操作。

如果您的标题字符串始终包含 (year) 部分并假设 IMDB 将在电影标题中使用单引号(如您的示例),则您的正则表达式可以简化为

"?(.*?)"?\s+\((.{4})\)

这里有一些 JavaScript 可以一致地打印带有引号的标题:

var titles = [
"\"'Allo 'Allo!\" (1982)",
"\"A film in production\" (????)",
"Hachi: A Dog's Tale (2009)"
];

var re = /"?(.*?)"?\s+\((.{4})\)/;

for each ( var t in titles ) {
var titleParts = t.match(re);
console.log('Title: "%s" ; Year: %s', titleParts[1], titleParts[2]);
}

输出:

Title: "'Allo 'Allo!" ; Year: 1982
Title: "A film in production" ; Year: ????
Title: "Hachi: A Dog's Tale" ; Year: 2009

关于javascript - 正则表达式 - 子表达式 - IMDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18681130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com