我该如何修复这个正则表达式,不要触及像 HYDRAULIC
这样的扩展,并且只将 HYD
和 HYD.
转换为 HYDRAULIC
并解决空间问题(对于 HYD.CYLINDER
)?
正则表达式(hyd.
和 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
替换:
HYDRAULIC
HYDRAULIC CYLINDER
HYDRAULICCYLINDER
HYDRAULICCYLINDER
HYDRAULIC CYLINDER
CYLINDER,HYDRAULIC
CYLINDER,HYDRAULIC
CYLINDER,HYDRAULICCYLINDER, HYDRAULIC
CYLINDER, HYDRAULIC
CYLINDER,HYDRAULIC
最佳答案
你可以使用
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 : "") ;
}))
}
关于javascript - 如何调整我的正则表达式以仅替换缩写而不替换扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55469437/