如何替换多维文本javascript regex



我不知道这种情况的术语。我就叫它multidimensional文本替换。所以,# cmiiw。

的情况我有一个这样的text

var text = 'Budy: [expression 3 4 5]nJohn: [expression 2 5 6]';

但是我想要的输出是:

Buddy: 3 times smile, 4 times laugh, 5 times mad
John: 2 times smile, 5 times laugh, 6 times mad

我已经尝试了我的正则表达式查询。但是我不知道如何把数字替换成那样。

这就是我所尝试的:

var text = 'Budy: [expression 3 4 5]nJohn: [expression 2 5 6]';
text = text.replace(/([expressionsw+sw+sw+]?)/g, "expression")
console.log(text)

Thanks for advance.

您的正则表达式是正确的,您只需要将感兴趣的值(3 4 52 5 6)捕获到组中,以便您可以在输出中使用它们进行替换:

var text = 'Budy: [expression 3 4 5]nJohn: [expression 2 5 6]';
text = text.replace(/[expressions(w+)s(w+)s(w+)]/g, '$1 times smile, $2 times laugh, $3 times mad')
console.log(text)

试试这个:

const text = 'Budy: [expression 3 4 5]nJohn: [expression 2 5 6]';
const regex = /[expression *(d+) *(d+) *(d+)]/g; 
let result = text.replace(regex, '$1 times smile, $2 times laugh, $3 times mad')
console.log(result)

输出:

Budy: 3 times smile, 4 times laugh, 5 times mad
John: 2 times smile, 5 times laugh, 6 times mad

解释:

  • [expression-扫描文本
  • *-扫描空间
  • (d+)-扫描和捕获数字
  • 重复前两项三次
  • ]-扫描文本
  • 替换,将捕获的数字分别引用为$1,$1,$3

let x = ["smile", "laugh", "mad", "xD", ":)"]
var text = 'Budy: [expression 3 4 5]nJohn: [expression 2 5 6 11 20]';
let matches = [...text.matchAll(/(w+): [expression (.+)]/gm)];
let y = matches.map(([_, name, numbers]) => {
numbers = numbers.split(" ").map((num, i) => `${num} times ${x[i]}`).join(", ");
return name + ": " + numbers;
});
console.log(y);

最新更新