У меня есть строка, которая выглядит следующим образом:
query = "I learned to =play the 'Ukulele' in 'Lebanon'."
Как видите, в ней есть некоторые специальные символы, такие как =
, '
, которые я хочу удалить изначально.
Однако все, что я удаляю, должно быть возвращено в конце концов. Поэтому перед удалением я должен запомнить индексную позицию каждого вхождения этих специальных символов. Поэтому я написал код, в котором хранится информация о сопоставлении, которая содержит символы и их несколько индексов. Вот как это выглядит
specialCharIndexMapping {
',': [],
"'": [ 23, 31, 36, 44 ],
'"': [],
'=': [ 13 ],
'>': [],
'<': []
}
Как видите, одинарная кавычка '
появилась в индексах 23, 31, 26, 44 и равна =
, появилась в индексе 13.
Теперь я удаляю специальные символы из строки
query = query.replace(/"/g,"").replace(/'/g,"").replace(/=/g,"").replace(/>/g,"").replace(/</g,"").replace(/,/g,"");
Так что теперь мой запрос выглядит следующим образом
query = I learned to play the Ukulele in Lebanon.
Теперь мне нужно поместить эти специальные символы обратно в мою строку на основе информации индекса. Вот что я делаю
for (char in specialCharIndexMapping) {
if(specialCharIndexMapping[char] !== []) {
charIndices = specialCharIndexMapping[char]
for(i=0; i<charIndices.length; i++) {
index = charIndices[i]
//query = query.substr(0, index) + char + query.substr(index);
query = query.slice(0, index) + char + query.slice(index);
}
}
}
console.log(query)
}
Но персонажи возвращаются не в те места. Вот как выглядит моя последняя строка
query = "I learned to =play the U'kulele 'in L'ebanon.'"
Потратив некоторое время, я понял, что это может быть связано со смещением строки из-за введения новых символов. Таким образом, последующие индексы не сохранятся. Поэтому я попытался сделать что-то ниже
for (char in specialCharIndexMapping) {
if(specialCharIndexMapping[char] !== []) {
charIndices = specialCharIndexMapping[char]
for(i=0; i<charIndices.length; i++) {
if (i==0) {
index = charIndices[i]
}
else {
index = charIndices[i] -1
}
//query = query.substr(0, index) + char + query.substr(index);
query = query.slice(0, index) + char + query.slice(index);
}
}
}
console.log(query)
}
Я в основном продолжаю уменьшать позицию индекса на 1, за исключением первой замены. Это намного ближе к исходной строке, но все равно не так. Вот как это выглядит сейчас
query = "I learned to =play the U'kulele' in 'Lebanon'."
Как мне обеспечить замену специальных символов в соответствующих местах и вернуть исходную строку?