![](/img/trans.png)
[英]Split a string into an array of words, punctuation and spaces in JavaScript
[英]Reverse words in array string matching punctuation in Javascript
如何反轉此字符串中的單詞,包括標點符號?
String.prototype.reverse = function () {
return this.split('').reverse().join('');
}
var str = "This is fun, hopefully.";
str.reverse();
目前我得到這個:
".yllufepoh ,nuf si sihT"
當我想返回這個時:
"sihT si nuf, yllufepoh."
您可以反轉每個單詞而不是整個字符串,但是您必須將空格、句點等分開,因此需要一個單詞邊界
String.prototype.reverse = function () { return this.split(/\\b/g).map(function(word) { return word.split('').reverse().join(''); }).join(''); } var str = "This is fun, hopefully."; document.body.innerHTML = str.reverse();
請注意,這會將逗號移動一個空格,因為它會在一個邊界中獲取逗號和空格並交換它們。 如果逗號需要保持在同一位置,也可以在空格上拆分,並將正則表達式更改為/(\\b|\\s)/g
簡單地反轉字符串不會給出解決方案。
var str = "This is fun, hopefully."; alert(str.split("").reverse().join("").split(" ").reverse().join(" "));
你可以想象你收到了一個字母流,你必須根據一些分隔符(如:空格、逗號、破折號等)構造單詞。
在閱讀每個字符時,您一直在反向構造單詞。
當你點擊任何分隔符時,你就完成了這個詞。
現在您只需將它添加到結果中並附加分隔符(這樣分隔符不會放在單詞的開頭,而是放在結尾)。
下面是一個例子:
const inputString = "HELLO, Welcome to Google's meeting. My name is Jean-Piere... Bye"; console.log('Normal words: ', inputString); const result = reverseWords(inputString); console.log('Words reversed: ', result); function reverseWords(str='', separators=' ,.-') { let result = ''; let word = ''; for (const char of str) { if (separators.includes(char)) { result += word + char; word = ''; } else { word = char + word; } } // Adds last remaining word, if there is no separator at the end. result += word; return result; }
您可以按順序反轉字符串中的每個單詞,方法是將該單詞拆分為一個單詞數組,然后反轉每個單詞並將其存儲在一個新數組中,然后加入該數組,如下所示。
//1) Reverse words function reverseWords(str) { // Go for it let reversed; let newArray=[]; reversed = str.split(" "); for(var i = 0;i<reversed.length; i++) { newArray.push(reversed[i].split("").reverse().join("")); } return newArray.join(" "); } let reversedString = reverseWords("This is fun, hopefully."); console.log("This is the reversed string : ",reversedString);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.