我不知道这种情况的术语。我就叫它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 5
和2 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);