У меня есть этот сценарий в моем чате, где я хочу обойти строку из встроенного приложения и заменить ее на определенную фразу.
<div id="testdiv">
This is an example of a sentence that i want to replace.
</div>
Я хочу заменить следующее:
Слово "предложение" должно оставаться и не будет затронуто.
Таким образом, выход будет: I replaced the sentence using javascript
Я использовал этот код, 2-х функцию, и он работает, но я ищу кого-то, кто поможет очистить мой код или другой метод, например split или concat, если применимо? И если возможно поставить его на одну функцию с той же идеей.
function replace1 () {
var str1 = document.getElementById("testdiv").innerHTML;
var ptrn1 = /This is an example of a/gi;
var rep1 = "This is an example of a";
var newstr1 = rep1.replace(ptrn1, "that i want to replace");
document.getElementById("testdiv").innerHTML = newstr1;
}
function replace2 () {
var str2 = document.getElementById("testdiv").innerHTML;
var ptrn2 = /that i want to replace/gi;
var rep2 = "that i want to replace";
var newstr2 = rep1.replace(ptrn2, "using javascript");
document.getElementById("testdiv").innerHTML = newstr2;
}
function replace1 () {
var str1 = document.getElementById("testdiv").innerText;
var ptrn1 = /This is an example of a/gi;
var ptrn2 = /that i want to replace/gi;
var str2 = str1.replace(ptrn1, "I replaced the").replace(ptrn2, "using javascript");
document.getElementById("testdiv").innerHTML = str2;
}
replace1()
<div id="testdiv">
This is an example of a sentence that i want to replace.
</div>
Вы можете использовать это, используя split и join
Код
function replace(){
var notReplaced = "sentence";
var part1 = "I replaced the ";
var part2 = " using javascript";
var mainString = document.getElementById("testdiv").innerHTML;
var splitPieces = mainString.split(notReplaced);
splitPieces[0] = part1;
splitPieces[1] = part2;
var result = splitPieces.join(notReplaced);
console.log(result);
}
Ну вот!
function replace(totalString, keepString) {
var newstr = totalString.split(keepString);
var repstr1 = "I replaced the";
var repstr2 = "using javascript";
return [repstr1, repstr2].join(keepString);
}
var div = document.getElementById("testdiv");
div.innerHTML = replace(div.innerHTML, " sentence ");
<div id="testdiv">
This is an example of a sentence that i want to replace.
</div>
Я не уверен, прав ли вы, но почему бы вам просто не написать его в одной функции без использования всех этих вспомогательных переменных. Я бы предложил вам что-то подобное в качестве динамичного подхода.
function replaceText(toReplace, target, string){
toReplace.map((s, idx) => { string = string.replace(s.input, s.output) })
target.textContent = string
}
let toReplace = [
{ input: 'This is an example of a', output: 'I replaced the'},
{ input: 'that i want to replace', output: 'using JavaScript'}]
let elem = document.getElementById('testdiv')
let string = elem.textContent
replaceText(toReplace, elem, string)
<!DOCTYPE html>
<HTML>
<body>
<center>
<h1> Sentence</h1><br>
<div id="testdiv">
This is an example of a sentence that i want to replace.
</div><br>
<input type='text' id='replace' placeholder="Replace"><br>
<input type='text' id='with' placeholder="With"><br>
<input type='submit' onClick="replaceSentence()">
</center>
<script type="text/javascript">
function replaceSentence(){
var val = document.getElementById('testdiv').innerHTML;
document.getElementById('testdiv').innerHTML = val.replace(document.getElementById('replace').value,document.getElementById('with').value);
}
</script>
</body>
</HTML>
вы можете использовать функцию замены, такую как str.replace(...).replace(...)
function replacer() {
var str1 = document.getElementById("testdiv");
var newstr1 = str1.innerHTML.replace(/This is an example of a/gi, "I replaced the")
.replace(/that i want to replace/gi, "using javascript");
str1.innerHTML = newstr1;
}
replacer();
<div id="testdiv">
This is an example of a sentence that i want to replace.
</div>
Вы также можете использовать группу захвата для захвата содержимого "предложения" и обернуть его необходимыми заменами:
function replaceContents () {
var str1 = document.getElementById("testdiv").innerHTML;
var ptrn1 = /This is an example of a(.*)that i want to replace/gi;
var replace1 = "I replaced the";
var replace2 = "using javascript";
var newstr1 = str1.replace(ptrn1, replace1+"$1"+replace2);
document.getElementById("testdiv").innerHTML = newstr1;
}
JSFiddle: https://jsfiddle.net/7hw6o8sy/
для любого ввода:
function replace() {
var fixedPiece = "sentence";
var firstPart = "I replaced the ";
var secondPart = " using javascript";
var wholeSentence = document.getElementById("testdiv").innerHTML;
var index = wholeSentence.indexOf('sentence');
var newSentence = wholeSentence.replace(wholeSentence.substr(0, index - 1), firstPart).substr(0, index + fixedPiece.length);
var newSentence = newSentence.concat(secondPart);
document.getElementById("testdiv").innerHTML = newSentence;
}