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

标签 javascript regex

我该如何修复这个正则表达式,不要触及像 HYDRAULIC 这样的扩展,并且只将 HYDHYD. 转换为 HYDRAULIC 并解决空间问题(对于 HYD.CYLINDER)?

Link of regex

正则表达式(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/

相关文章:

java - 正则表达式替换标签之间的所有逗号

javascript - 使用 clearInterval 方法可以实现什么,而将区间变量引用设置为 null 却不能实现?

javascript - 使用 JS 将 Windows-1252 转换为 UTF-8

javascript - 单击导航箭头时如何停止 Owl Carousel

javascript - 如何滚动 <object> 元素?

javascript - 在 javascript 字符串搜索中查找整个单词而不是单词的一部分

javascript - json 值的 jstree 给出了一些错误

javascript - 正则表达式的 javascript 字符串匹配未正确标记化

javascript - 将变量添加到正则表达式匹配javascript

java - 如何构造特定的 Java 正则表达式