我是Regex的新手,我正在努力学习。
我正在创建一个邮件合并工具,并希望使用RegExp
为我提供更多的灵活性和控制权。我替换的占位符之一是company_name
。
我有一份公司名单。许多公司都有自己的公司类型(例如我的公司,公司,或我的公司 LLC )。我想使用正则表达式来标准化结果。但是,我不知道如何编写它,除了手动列出每个选项。例如,这些名称中的每一个都应该在结尾处产生相同的值:
等等......
我相信我可以用它来达到我想要的效果:
var companyName = lead.company_name;
companyName = companyName.replace(/(, Inc.)|( Inc.)|(, LLC)/gi, '');
但是,我希望有一种更有效的方法:
注意:
我必须考虑公司在实际名称中输入字符的可能性(例如我的Co
mpany Co
),并且最后只删除组织类型。
这可以轻松完成吗?
答案 0 :(得分:5)
是的,这是一种更有效的方式(如果效率更高,我们的意思是更短),尽管这样的多条件模式通常会导致简洁性与可读性之间的权衡。
这是一个小组问题,这使我们可以避免重复。
var rgx = /(, ?)?(LLC|Inc|Co)\.?$/i;
让我们分解。
第一部分(, ?)?
表示公司名称后面可以选择逗号和可选空格的组合。所以这将不允许逗号,逗号后面没有空格,或逗号后面有空格。
第二部分(LLC|Inc|Co)
是一个简单的子组,其中包含不同类型的后缀
最后一部分\.?
允许在结尾处有一个可选的句点(我们逃避句点,因为在大多数REGEX实现中句点具有特殊含义,匹配任何非空格字符)。
另请注意,您不需要g
标志,因为(据推测)没有公司名称会有多个类型后缀。此外,$
标志在这里很有用,因为它确保我们的匹配必须位于公司名称的末尾,而不仅仅是在其中的某个位置。
答案 1 :(得分:3)
如果每个公司名称都是一个字符串,您可以尝试以下正则表达式:
/,?\s*(llc|inc|co)\.?$/i
说明:
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