First Name Last Name(可选)space 逗号,但如果有 3 个字母大写,则不要获取任何内容

First Name Last Name (Optional) space comma, but do NOT Get Anything If There are 3 Letters Capitalized

嗯,我已经搜索过了,有很多关于名字的问题,但我找不到任何解决方案来解决我正在寻找的问题。

当描述中有转换时,我将带有 jQuery 的文本设置为 var。 所以我想找电影的演员表。问题是文本内容也有类别,同样用逗号分隔,可能会被误检测为强制转换

因此,如果我在文本超过 3 个大写字母时拒绝,我可以在返回的文本中过滤正确的转换。


演员表在文本中的排列方式:

John Smith、Mary Jane、Neo、Trinity、Morpheus、Mr. Anderson


有时姓氏不存在,这是使事情复杂化的原因。 这样它就与类别混淆了。如果我可以从拒绝列表中设置一堆单词,也许它会比拒绝大写字母更好,因为大写字母在类别下很常见。

var castExists = $('span.post-bold:contains("Cast")');
var cast = "";

if (castExists.length) {
    cast = $("div.post-message").text();
    var reg = /^(?!\s)([a-z ,A-Z.'-]+)/gm;
    var getCast = reg.exec( cast );
    if (getCast !== null) {
        cast = getCast[0].toString().trim();
    }
    else {
        getCast = '';
    }
}

标题:电影标题

生产:某物

年份:2021

类别:剧情、恐怖、科幻、电视剧、动作

演员:约翰·史密斯、玛丽·简、尼奥、崔妮蒂、墨菲斯、安德森先生

虽然 Title:, Year:, Cast: 等span.post-bold 标签下,但所有内容都在 div.post-message

例如:

<div class="post-message">
<span class="post-bold">Title</span>
: Movie Title
<span class="post-bold">Year</span>
: 2021
<span class="post-bold">Categories</span>
: Drama, HORROR, Sci Fi, TV Show, Action
<span class="post-bold">Cast</span>
: John Smith, Mary Jane, Neo, Trinity, Morpheus, Mr. Anderson
</div>

由于这取决于用户的创建方式,所以顺序可能会有所不同。


这是我尝试编写的最后一个正则表达式,但它不起作用

([A-Z][a-z]{1,}( |, )([A-Z][a-z]{1,})?)+



更新:

我用示例在 regex101 上创建了 this link on regex101.com,正如我在评论中看到的那样,我似乎对这个问题不太清楚。这样我认为人们有更好的机会帮助我。有名字的应该拿,有类别的不可以。

PS:我在 link.

的评论中设置了 Mohammad 告诉我的正则表达式

以下是我对你的问题的建议:regex101

顺便说一句,如果你有一个好的格式,试试这个!

var str = 'John Smith, Mary Jane, Neo, Trinity, Morpheus, Mr. Anderson'
console.log(str.split(', '))

我不认为使用找到三个连续大写字母的正则表达式来过滤掉投射线是可行的方法。

首先,根据您的示例,这并不总是有效,因为您的示例中有一行类别没有包含连续三个大写字母的单词。

其次,如果您正在查看实际姓名,您很可能也会错误地过滤掉带有姓名的行,例如有人喜欢 Rodney L Jones III is among the cast (take a look at these interesting wrong assumptions that programmers make about names).

相反,您可以先通过 finding a span that contains Cast (using filter()) and then get the text of the next node (using nextSibling.nodeValue). I also used substring() to trim characters at the beginning(删除冒号和空格)和 trim() 来提取转换行以从其末尾删除换行符:

$("div.post-message").contents().filter(function() { return ($(this).text() === 'Cast');
})[0].nextSibling.nodeValue.substring(3).trim();

这为您提供了演员阵容:

John Smith, Mary Jane, Neo, Trinity, Morpheus, Mr. Anderson

然后您可以简单地在每个逗号处拆分(假设其中没有带逗号的名称):

var actors = getCast.split(', ');
for (var i = 0; i < actors.length; i++) {
  console.log(actors[i]);
}

输出:

John Smith
Mary Jane
Neo
Trinity
Morpheus
Mr. Anderson

Test it here.