修改正则表达式以仅替换大括号外的字母并排除标点符号

时间:2018-11-16 18:00:42

标签: regex

我有一个正则表达式,用大括号外的字母“ z”替换所有字符。但是我只想替换字符a-z和A-Z。我该如何修改正则表达式呢?

在javascript中:

let str = "hours, plural, =1 {hour} other {hours}";
str.replace(/[^{}](?=([^{}]*\{[^{}]*\})*[^{}]*$)/g, 'z');

这导致:

zzzzzzzzzzzzzzzzzz{hour}zzzzzzz{hours}

但应为:

zzzzz, zzzzzz, =1 {hour} zzzzz {hours}

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用此先行正则表达式进行搜索:

/[a-zA-Z](?![^{]*})/g

RegEx Demo

说明:

  • [a-zA-Z]:匹配字母a-zA-Z
  • (?![^{]*}):否定性的前瞻性断言,我们没有前面的关闭},而在两者之间没有打开{

代码:

const regex = /[a-zA-Z](?![^{]*})/g;
const str = `hours, plural, =1 {hour} other {hours}`;

const result = str.replace(regex, 'z');

console.log(result);
//=> zzzzz, zzzzzz, =1 {hour} zzzzz {hours}