我需要替换'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'))