搜索词组

时间:2018-08-19 19:16:48

标签: javascript regex

我有一个大文件,几乎有100页,每行的开头是一个名称。我在正则表达式中使用JavaScript,问题是某些名称包含两个词,例如Alby's Mom。 我要搜索的文本如下所示:

 Alby: What is wrong?
 Alby’s Mom: Nothing child.
 Rick: Just tell him the truth!
 Alby: Yeah. I think I deserve to know!
 Little Blue Flower: (whisper) Don’t.

我需要选择所有名称(大约10个左右,这样就可以写下每个名称了)并列出如下列表:

Alby:
Alby's Mom:
Rick:
Alby:
Little Blue Flower:

我几乎可以用

(\bAlby\b|\bAlby's Mom\b|\bRick\b etc.....)+

但是问题在于,它不计算名称之间具有空格的名称,例如Alby的妈妈或Little Blue Flower。

我也不知道如何在名称末尾添加“:”,因为在名称之后立即将其添加到代码中将导致一直沿用的Alby之类的名称突然消失。我希望这是有道理的。

3 个答案:

答案 0 :(得分:0)

尝试以下操作:sqlalchemy.exc.IntegrityError: (_mysql_exceptions.IntegrityError) (1062, "Duplicate entry '...' for key 'hash'") [SQL: 'INSERT INTO results (...) VALUES (...)'] [parameters: (...)] (Background on this error at: http://sqlalche.me/e/gkpj)

Demo

说明

^\s*[^:\n]+:

答案 1 :(得分:0)

要查找多行后跟冒号的名称,可以在名称之间\s+来匹配一个或多个空白字符。

您可以使用替换,但是Alby's Mom\bAlby's Mom\b不匹配的原因是因为字符'不同。如果要同时匹配它们,则可以使用字符类['’]

如果要匹配,可以在替换后添加冒号:

\b(?:Alby(?:['’]s\s+Mom)?|Rick|Little\s+Blue\s+Flower):

const regex = /\b(?:Alby(?:['’]s\s+Mom)?|Rick|Little\s+Blue\s+Flower):/g;
const str = `Alby: What is wrong?
 Alby’s Mom: Nothing child.
 Rick: Just tell him the truth!
 Alby: Yeah. I think I deserve to know!
 Little Blue Flower: (whisper) Don’t.
Alby’s
Mom:

This is a test Little
Blue Flower: test`;
let m;

while ((m = regex.exec(str)) !== null) {
  if (m.index === regex.lastIndex) {
    regex.lastIndex++;
  }
  console.log(m[0]);
}

答案 2 :(得分:-2)

使用可以使用/^.+?:/gm

示例here