我有這個正則運算式,但它不符合我的預期:
name.replace(/sor\s*(\d )\.\s*szék/, function () {
return arguments[1] * 1 1;
});
我的字串是1. sor 1. szék. 我期待回報1. sor 2. szék
但回傳值是:1. 2。為什么?
uj5u.com熱心網友回復:
您將獲得該值,1. 2因為該模式sor\s*(\d )\.\s*szék與前導不匹配,1. 因此不會受到影響。
該部分arguments[1] * 1為 1,然后向其添加 1,結果為 2。
如果要使用replace,可以使用3個捕獲組并在replacement中使用,將group引數傳遞給replace的回呼函式。
捕獲的數字在第 2 組中,為了防止連接 2 個字串,您可以 在第 2 組之前添加一個。
let name = "1. sor 1. szék";
name = name.replace(
/(sor\s*)(\d )(\.\s*szék)/,
(m, g1, g2, g3) => `${g1}${ g2 1}${g3}`
);
console.log(name);
uj5u.com熱心網友回復:
您可以簡化常規運算式并僅用遞增值替換第二次出現的數字。
const
string = '1. sor 1. szék.',
result = string.replace(/\d /g, (c => v => c-- ? v : v 1)(1));
console.log(result);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/334972.html
標籤:javascript 正则表达式
上一篇:型別錯誤:response.hits[i].hit_set_id.toLowercase不是函式
下一篇:與函式一起使用時陣列的問題
