正则表达式从名称中删除公司类型

时间:2017-04-05 15:55:18

标签: javascript regex

我是Regex的新手,我正在努力学习。

我正在创建一个邮件合并工具,并希望使用RegExp为我提供更多的灵活性和控制权。我替换的占位符之一是company_name

我有一份公司名单。许多公司都有自己的公司类型(例如我的公司,公司,或我的公司 LLC )。我想使用正则表达式来标准化结果。但是,我不知道如何编写它,除了手动列出每个选项。例如,这些名称中的每一个都应该在结尾处产生相同的值:

  • 我的公司LLC
  • 我的公司,LLC
  • 我的公司,公司
  • My Company,Inc
  • MY Company Inc。
  • 我的公司
  • 我的公司公司
  • 我的公司

等等......

我相信我可以用它来达到我想要的效果:

var companyName = lead.company_name;
companyName = companyName.replace(/(, Inc.)|( Inc.)|(, LLC)/gi, '');

但是,我希望有一种更有效的方法:

  1. 捕捉变体
  2. 确保公司类型始终在最后
  3. 包含逗号和句点(如果存在),但不必列出包含和不包含
  4. 的所有选项

    注意: 我必须考虑公司在实际名称中输入字符的可能性(例如我的Co mpany Co),并且最后只删除组织类型。

    这可以轻松完成吗?

3 个答案:

答案 0 :(得分:5)

是的,这是一种更有效的方式(如果效率更高,我们的意思是更短),尽管这样的多条件模式通常会导致简洁性与可读性之间的权衡。

这是一个小组问题,这使我们可以避免重复。

var rgx = /(, ?)?(LLC|Inc|Co)\.?$/i;

让我们分解。

  • 第一部分(, ?)?表示公司名称后面可以选择逗号和可选空格的组合。所以这将不允许逗号,逗号后面没有空格,或逗号后面有空格。

  • 第二部分(LLC|Inc|Co)是一个简单的子组,其中包含不同类型的后缀

  • 最后一部分\.?允许在结尾处有一个可选的句点(我们逃避句点,因为在大多数REGEX实现中句点具有特殊含义,匹配任何非空格字符)。

另请注意,您不需要g标志,因为(据推测)没有公司名称会有多个类型后缀。此外,$标志在这里很有用,因为它确保我们的匹配必须位于公司名称的末尾,而不仅仅是在其中的某个位置。

答案 1 :(得分:3)

如果每个公司名称都是一个字符串,您可以尝试以下正则表达式:

/,?\s*(llc|inc|co)\.?$/i

说明:

  • 可选逗号
  • 可选空格
  • LLC / Inc / Co中的任何一个(不区分大小写)
  • 可选期间
  • 字符串末尾的所有上述内容



const companyNames = [
'My Company LLC',
'My Company, LLC',
'My Company, Inc.',
'My Company, Inc',
'MY Company Inc.',
'My Company Inc',
'My Company Co',
'My Company',
];

console.log(companyNames.map(name => name.replace(/,?\s*(llc|inc|co)\.?$/i, '')));




答案 2 :(得分:2)

我会这样做:

companyName = companyName .replace(/,?\h*(?:\b(?:inc|LLC|co)\b\.?)?$/i,"");

<强>解释

/                       : delimiter
    ,?                  : optional comma
    \h*                 : optional horizontal spaces
    (?:                 : non capture group
        \b              : word boundary
        (?:inc|LLC|co)  : non capture group, one of the alternatives
        \b              : word boundary
        \.?             : a dot, optional
    )?                  : end group, optional
    $                   : end of string
/i                      : delimiter, case insensitive