Поиск и замена в javasript -replace
Такая задача: В поле textarea вставляется копируемый текст. В этом тексте надо найти и заменить определенные слова. Кроме этого надо записать количество измененных слов. У меня получилось так. Но мне кажется что есть ещё более короткий путь. К примеру чтобы count один раз написать или слова функцию replace тоже использовать один раз в цикле. Но не знаю как. Спасибо за каждую помощь
function Ivazkuni(){
var str = document.getElementById("text").value;
var count = 0;
// Первый поиск и замена
var imlo = str
.replace(/руз/g,function(){ count = count+1; return 'рӯз'; })
.replace(/куҳ/g,function(){ count = count+1; return 'кӯҳ'; })
.replace(/Руз/g,"Рӯз")
.replace(/кӯҳна/g,"куҳна")
.replace(/дуст/g,"дӯст")
.replace(/Дуст/g,"Дӯст")
.replace(/У/g,"Ӯ")
.replace(/вҷ/g,"ҷв");
document.getElementById("text").value = imlo;
console.log(count);
}
<textarea name="name" id="text" rows="8" cols="80"></textarea>
<button onclick="Ivazkuni()">Try it</button>
<script type="text/javascript" src="replace.js"></script>
Ответы (2 шт):
Автор решения: vsemozhebuty
→ Ссылка
Можно, например, так, если я правильно понял задачу:
const replacements = new Map([
[/руз/g, 'рӯз'],
[/куҳ/g, 'кӯҳ'],
[/Руз/g, 'Рӯз'],
[/кӯҳна/g, 'куҳна'],
[/дуст/g, 'дӯст'],
[/Дуст/g, 'Дӯст'],
[/У/g, 'Ӯ'],
[/вҷ/g, 'ҷв'],
]);
function Ivazkuni(){
let str = document.getElementById("text").value;
let count = 0;
for (const [regexp, replacement] of replacements) {
str = str.replace(regexp, () => { count++; return replacement });
}
document.getElementById("text").value = str;
console.log(count);
}
<textarea name="name" id="text" rows="8" cols="80"></textarea>
<button onclick="Ivazkuni()">Try it</button>
Автор решения: Grundy
→ Ссылка
Можно обойтись одним регулярным выражением используя символ | указывающий альтернативы поиска.
В этом случае замена и подсчет будут происходит в одном вызове .replace.
function Ivazkuni() {
var str = document.getElementById("text").value;
var count = 0;
var map = {
'руз': 'рӯз',
'куҳ': 'кӯҳ',
'Руз': 'Рӯз',
'кӯҳна': 'куҳна',
'дуст': 'дӯст',
'Дуст': 'Дӯст',
'У': 'Ӯ',
'вҷ': 'ҷв'
};
// Первый поиск и замена
var imlo = str.replace(/руз|куҳ|Руз|кӯҳна|дуст|Дуст|У|вҷ/g, function($) {
count += 1;
return map[$];
});
document.getElementById("text").value = imlo;
console.log(count);
}
<textarea name="name" id="text" rows="8" cols="80"></textarea>
<button onclick="Ivazkuni()">Try it</button>
<script type="text/javascript" src="replace.js"></script>