簡體   English   中英

刪除縮進,但在模板文字中保留換行符

[英]Remove indentation, but keep line breaks in template literal

我有以下模板文字:

let message = `
    1 call
    Alert time: 6:00:57 PM
    `

我已經從這里嘗試了各種答案,但是對於我正在使用的 API,這些解決方案都不能正常工作。 這些解決方案似乎導致在開始反引號和結束反引號后的換行符與縮進一起被刪除。

因為這種情況正在發生,所以我正在使用的 API 將模板文字視為沒有換行符的單個字符串。

如何保留所有換行符,但僅刪除1 callAlert time: 6:00:57 PM前面的縮進?

我預期的 output 將是這樣的:


1 call
Alert time: 6:00:57 PM

正則表達式可以匹配行首的空格字符並將它們替換為空字符,只留下換行符:

message.replace(/^ +/gm, '')

演示:

 let message = ` 1 call Alert time: 6:00:57 PM ` document.querySelector('textarea').value = message.replace(/^ +/gm, '');
 <textarea></textarea>

我會用所有新行\n split字符串,然后修剪數組中的項目以刪除空格,然后用新行\n再次加入它們。 filter是刪除split數組中可能是空字符串的項目

 let message = ` 1 call Alert time: 6:00:57 PM `; console.log(['', ...message.split('\n').filter(Boolean).map(str => str.trim()), ''].join('\n'));

當然,有無數種方法可以找到您的解決方案。 要僅使內容的縮進消失,您可以對模板字符串使用以下方法。 這確保只有模板字符串創建的縮進消失,但基本格式保持不變。

 function trimIndent(strings, ...values) { const result = new Array(strings.length); result[0] = strings[0].replace(/^\n/, ''); const endIndex = strings.length - 1; result[endIndex] = strings[endIndex].replace(/\n$/, ''); var indent = result[0].match(/^\s+/g); result[0] = result[0].replace(/^\s+/, ''); for (let i = 0, m = result.length; i < m; i++) { var input = result[i]?? strings[i]; result[i] = input.replace(new RegExp('\n' + indent, "gm"), '\n'); } return result.flatMap((value, index) => { return value + (index < values.length? values[index]: '') }).join(""); } // example call: var user = { id: 10, name: "Kevin", } if (true) { console.log(trimIndent` <div> <span>ID: ${user.id}</span> <span> Username: ${user.name} </span> </div> `); }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM