Regexp替换任何单个单词



我需要替换'page '。A = b' with 'page。A = node.b'。总之,我需要把单个单词'b'变成'node.b';换句话说,就是字符串页。A = b &&页面。& lt;C应该转换成"page"。A =节点。b,,页面。& lt;node.c',只需添加'node. c'。’作为单个单词的前缀。有人能帮我一下吗?我认为js的regexp可以工作,但只是找不到它的方式。

let origin = 'page.a = b'
let expected = 'page.a = node.b';

如何从原点获得期望的字符串?

可以使用反遍历来查找前面或后面没有点或单词字符的单词:

(?<![.w])(w+)(?![.w])

,用

替换匹配的词
node.$1

https://regex101.com/r/GD2N9g/5

您可以尝试以下方法:

逻辑:

  • 使用= (=)拆分字符串以获得LHS和RHS,因为此操作只需要在RHS上进行。
  • 创建一个正则表达式来匹配任何单词+句点组合。您还可以使用非空格字符(/[s]+/),因为这将涵盖括号符号和下划线以及
  • 对于每个匹配,检查它们是否没有句号(.)。如果没有,可以附加前缀返回。
  • 连接两个部分并返回字符串

let origin = 'page.a = b'
let o1 = 'page.a = b && page.a < c'
function transformStr(str, prefix) {
const regex = /([w.]+)/g;
const [lhs, rhs] = str.split('=')
const newRhs = rhs.replace(regex, (part) => {
return /^w+$/.test(part) ? `${prefix}.${part}` : part
})
return `${lhs}=${newRhs}`
}
console.log(transformStr(origin, 'node'))
console.log(transformStr(o1, 'node'))

作为扩展,您可以添加对可以存在于变量中的特殊字符的支持。这种方法匹配非空格字符组,并且只处理那些只有单词字符、下划线或美元

的字符组。

function transformStr(str, prefix) {
const regex = /([^s]+)/g;
const [lhs, rhs] = str.split('=')
const newRhs = rhs.replace(regex, (part) => {
return /^[w$]+$/.test(part) ? `${prefix}.${part}` : part
})
return `${lhs}=${newRhs}`
}
console.log(transformStr('page.a = b', 'node'))
console.log(transformStr('page.a = b && page.a < c', 'node'))
console.log(transformStr('page._a = _b && page.a < $c', 'node'))

最新更新