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

Javascript 我如何调整我的正则表达式以只替换缩写而不替换扩展?,javascript,regex,Javascript,Regex,如何修复此正则表达式,使其不接触诸如HYD之类的扩展,只将HYD和HYD.转换为hydral,并修复空间问题(对于HYD.cyline) 正则表达式(hyd.和hyd): 测试字符串: HYD. CYLINDER HYD CYLINDER HYD.CYLINDER HYDRAULIC CYLINDER CYLINDER,HYD. CYLINDER,HYDRAULIC CYLINDER,HYD CYLINDER, HYD. CYLINDER, HYDRAULIC CYLINDER,HYD 替代

如何修复此正则表达式,使其不接触诸如
HYD
之类的扩展,只将
HYD
HYD.
转换为
hydral
,并修复空间问题(对于
HYD.cyline

正则表达式(
hyd.
hyd
):

测试字符串:

HYD. CYLINDER
HYD CYLINDER
HYD.CYLINDER
HYDRAULIC CYLINDER
CYLINDER,HYD.
CYLINDER,HYDRAULIC
CYLINDER,HYD
CYLINDER, HYD.
CYLINDER, HYDRAULIC
CYLINDER,HYD
替代:

HYDRAULIC

HYDRAULIC CYLINDER
HYDRAULICCYLINDER
HYDRAULICCYLINDER
HYDRAULIC CYLINDER
CYLINDER,HYDRAULIC
CYLINDER,HYDRAULIC
CYLINDER,HYDRAULICCYLINDER, HYDRAULIC
CYLINDER, HYDRAULIC
CYLINDER,HYDRAULIC

一种方法:使用这个正则表达式可能不是最好的:

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

带有“液压”且末端有空格的接头只需使用以下模式:
\b(hyd)\W+

唯一新的是
\W+
-匹配一个或多个非单词字符

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

您可以使用

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

正则表达式详细信息

  • \b
    -前导词边界
  • hyd
    -子字符串
  • (?:\.\b)
    -点或字边界
  • ([a-z0-9]?)
    -捕获组1:可选字母数字字符
如果第1组匹配,则该匹配将替换为
液压
+空格+第1组中捕获的字母,否则,将替换为仅
液压

请注意,
\bhyd(?:\.\124;\ b)
\bhyd\b\.?
是同义词

JS演示:

var strs=[‘液压缸’、‘液压缸’、‘液压缸’、‘液压缸’、‘液压缸’、‘液压缸’、‘液压缸’、‘液压缸’、‘液压缸’、‘液压缸’、‘液压缸’、‘液压缸’;
变量rx=/\bhyd(?:\.\b)([a-z0-9]?)/gi;
用于(STR的var s){
console.log,“=>”,s.replace(rx,函数($0,$1){
返回“液压”+($1?”“+$1:”);
}))

}
您的
替换是否为预期输出,或者是什么?请尝试
\bhyd(?:\.\124;\ b)
,请参阅。在
hyd
的末尾,检查点或单词边界。或者尝试
\bhyd\b\?
如果要在字母或数字前插入空格,请尝试
s.replace(/\bhyd(?:\.\b)([a-z0-9])/gi,函数($0,$1){返回“液压”+($1?”+$1:;)})
/\bhyd;如何在正则表达式中包含变量而不是字符串“hyd”?@isakalfleur
var rx=new RegExp(“\\b”+term+”(?:\\.\124;\\ b)([a-z0-9]?),“gi”)
,它是一个on SO。如果您的术语可以包含特殊字符,
term.replace(/[-\/\^$*+?.()\[\]{}]/g,'\\$&')
。如果术语可以以特殊字符开头/结尾,则不能依赖
\b
s = s.replace(/\bhyd(?:\.|\b)([a-z0-9]?)/gi, function($0, $1) { 
    return "HYDRAULIC" + ($1 ? " " + $1 : "") ; 
})