我正在尝试使用javascript用以下格式@variable替换变量的文本(是的,我知道这是一种不好的做法,但是很遗憾,它是来自外部系统的数据,所以我无法更改它。)
问题是,如果文本中有邮件地址,我需要确保它也能正常工作。 因此,它需要匹配@variable而不匹配test@example.com。如果是另一种语言,我会简单地使用类似的语言,但是js不支持lookbehind。
text.replace(/(?<!\w)@[\w]+/g, replacement);
'@ var'匹配@var
“ @ var bar”匹配@var
“ bar @ var”不匹配
'bar2 @ var'不匹配
使用正则表达式执行此操作的任何JavaScript方法吗?
以下是使用负向后看的预期结果的示例 https://regex101.com/r/orCEGE/1
答案 0 :(得分:0)
尚不清楚您确切要替换什么,但这是一个相当通用的方法:
const text = "@A foo@bar@baz @var@asdf.@Z";
const result = text.replace(/@(\w+)/g,
(m0, m1, pos, str) => {
if (pos > 0 && /\w/.test(str.charAt(pos-1))) {
return m0;
}
return "{replacement for " + m1 + "}";
}
);
console.log(result);
替换函数不仅获取字符串的匹配部分,还获取匹配发生的位置。此匹配位置可用于做出进一步的决定(例如,匹配的字符串是否应返回原样(如return m0;
)。