匹配正则表达式在“X”字符数之后开始

时间:2016-07-06 23:06:33

标签: regex google-apps-script

我在Google脚本中使用正则表达式来规范化公司名称,虽然我通过替换某些单词,标点符号和空格的组合非常接近完美,但我的最后一步是用3或更少的单词替换任何单词字母。

但是,在一开始他们的名字,即AB控股公司,它就摆脱了一些公司的缩略语。我不希望这与AB匹配,我希望它能找到罕见的“the”或公司代码(特别是SPA和NV等国外代码和Co和Inc)。这些代码不一定在字符串的末尾,但它们在开头之后似乎总是至少有4个字符。

我目前正在使用

text = text.replace(/\b[a-z]{1,3}\b)/i," ");

忽略[a-z]作为缺失的上限,我已单独处理

我认为可行的是“跳过”前几个字符,可能是4个是安全的,并且可能学习如何在将来包含空格和/或数字。所以我在看到另外一个相关的问题后写了这个。

text = text.replace(/((.{4})(.*)\b[a-z]{1,3}\b)/i," ");

Scipts似乎不允许外观,我的版本似乎不起作用。我输了。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

这是一个解决方案:

 text = text.replace("/^(.{4}.*)(\b[a-z]{1,3}\b)(.*)/gmi", "$1$3");

我改变的是:

  • 括起括号中的所有组 - 以便在替换时将其捕获并使用;

  • 既然你提到被替换的词可能不在字符串的末尾,我还添加了第三组 - 以匹配之后的所有内容。

  • 包含替换字符串(组1和组3)中单词前后的部分。

但请注意,它可能会返回误报 - 即如果公司名称是公司ABC,Inc。,它也会捕获ABC。因此,如果您知道要替换的单词,最好只使用更改:

text = text.replace("/^(.{4}.*)\b(Co|Inc|SPA|NV|the)\b(.*)/gmi", "$1$3");