[英]javascript reverse a substring inside a string optimally
我有一個場景需要反轉字符串中的 substring。 Javascript 字符串是不可變的,傳統的字符串交換技術在這里不起作用。 所以我決定使用string.split('')
和string.join('')
方法來獲得解決方案。 請檢查下面的代碼。
function reverseAString(str, startIndex, endIndex) {
let left = startIndex;
let right = endIndex;
let output = str;
while(left < right) {
const arr = output.split('');
let temp = arr[left]
arr[left] = arr[right]
arr[right] = temp;
output = arr.join('');
left += 1;
right -= 1;
}
return output
}
這按預期工作。 但是有沒有更好的方法來反轉 substring 因為上述解決方案不是實現反轉的最佳方法?
這是您的 function 但要簡化。 我們可以將調用字符串方法鏈接到數組方法中。 Array.prototype.reverse()用於反轉數組, Array.prototype.join()用於將數組中的所有元素連接成一個字符串。 String.prototype.substring()用於從原始字符串中剪切出字符串,但不會更改/更改原始字符串。
function reverseASubstring(str, startIndex, endIndex) { let reversedStr = str.substring(startIndex, endIndex).split("").reverse().join(""); return str.substring(0, startIndex) + reversedStr + str.substring(endIndex); } console.log(reverseASubstring("Tony is Tony in reverse.", 0, 4));
該解決方案構建了一個具有兩個捕獲組的正則表達式,一個用於跳過的字符數(例如起始索引),一個用於反轉的字符數。 有了這個,您可以應用單個正則表達式替換,使用.split('').reverse().join('')
反轉第二個捕獲組
function reverseASubstring(str, start, end) { let regex = new RegExp('^(.{' + start + '})(.{' + (end - start + 1) + '})'); return str.replace(regex, (m, c1, c2) => c1 + c2.split('').reverse().join('')); } let str = 'Hello world.'; console.log(str, 0, 4, '=>', reverseASubstring(str, 0, 4)); console.log(str, 6, 10, '=>', reverseASubstring(str, 6, 10));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.