我如何调整我的正则表达式以仅替换缩写而不扩展呢?

时间:2019-04-02 07:45:42

标签: javascript regex

如何解决此正则表达式,以免碰到HYDRAULIC之类的扩展,而仅将HYDHYD.转换为HYDRAULIC并解决空间问题(对于{{ 1}})?

Link of regex

正则表达式(HYD.CYLINDERhyd.):

hyd

测试字符串:

\b(hyd)(?:\s|$|[^\w])

替换:

HYD. CYLINDER
HYD CYLINDER
HYD.CYLINDER
HYDRAULIC CYLINDER
CYLINDER,HYD.
CYLINDER,HYDRAULIC
CYLINDER,HYD
CYLINDER, HYD.
CYLINDER, HYDRAULIC
CYLINDER,HYD

3 个答案:

答案 0 :(得分:1)

您可以使用

s = s.replace(/\bhyd(?:\.|\b)([a-z0-9]?)/gi, function($0, $1) { 
    return "HYDRAULIC" + ($1 ? " " + $1 : "") ; 
})

请参见regex demo

正则表达式详细信息

  • \b-前导词边界
  • hyd-子字符串
  • (?:\.|\b)-点或单词边界
  • ([a-z0-9]?)-捕获组1:一个可选的字母数字字符。

如果第1组匹配,则将匹配替换为HYDRAULIC +空格+在第1组中捕获的字母,否则,仅替换为HYDRAULIC

请注意,\bhyd(?:\.|\b)\bhyd\b\.? suggested by The fourth bird是同义词。

JS演示:

var strs = ['HYD. CYLINDER','HYD CYLINDER','HYD.CYLINDER','HYDRAULIC CYLINDER','CYLINDER,HYD.','CYLINDER,HYDRAULIC','CYLINDER,HYD','CYLINDER, HYD.','CYLINDER, HYDRAULIC','CYLINDER,HYD'];
var rx = /\bhyd(?:\.|\b)([a-z0-9]?)/gi;
for (var s of strs) {
  console.log(s, "=>", s.replace(rx, function($0, $1) { 
    return "HYDRAULIC" + ($1 ? " " + $1 : "") ; 
  }))
}

答案 1 :(得分:0)

一种方法:最好的方法不是使用此正则表达式:

\b(hyd\.?)(?:\s|$|[^\w])

和带有“ HYDRAULIC”的子项,在末尾有空格

答案 2 :(得分:0)

只需使用以下模式:\b(hyd)\W+

只有\W+是新字符-匹配一个或多个非单词字符。

然后将其替换为HYDRAULIC(注意末尾的空格!)。

Demo