我试图反转字符串中的单词而不会对标点符号产生任何影响 这是我目前的代码:
function reverse(str) {
str = str.split("").reverse().join("");
str = str.split(" ").reverse().join(" ");
console.log(str)
};
reverse("This is fun, hopefully.")
上述功能的结果是sihT si ,nuf .yllufepoh
我试图让它像sihT si nuf, yllufepoh.
答案 0 :(得分:4)
Another approach is to replace all sequences of letters with their reversed forms using replace and a regular expression, e.g.
function reverseWords(s) {
return s.replace(/[a-z]+/ig, function(w){return w.split('').reverse().join('')});
}
document.write(reverseWords("This is fun, hopefully.")); // sihT si nuf, yllufepoh.
If you wish to include numbers as word characters (w.g. W3C), then the regular expression should be:
/\w+/g
答案 1 :(得分:2)
将单词边界上的句子分开,这不会消耗任何字符串,
然后使用前瞻\S
将每个单词分成字母(带?=
的非空格),这样就不会消耗它们了。
反转字母数组,然后重新加入它们,没有分隔符.join("")
并最终重新加入句子,同样没有分隔符,因为当最初在单词边界上分割时,单词之间的空格被保留。
var sentence = "This is fun, hopefully.";
sentence.split(/\b/)
.map(w => w.split(/(?=\S)/)
.reverse()
.join("") )
.join("");
在Chrome的javascript控制台中执行此操作会产生输出:
"sihT si nuf, yllufepoh."
注意这并没有正确处理标点符号的运行。例如,hopefully!?
将变为yllufepoh?!
,也会反转标点符号。
答案 2 :(得分:0)
你可以用正则表达式做得更好,但这是我刚写的一个简单的解决方案。
function reverse(str){
var out = '';
var word = '';
for (var i=0;i<str.length;i++) {
// your punctuation characters
if (',.!? '.indexOf(str[i]) == -1) word += str[i];
else {
out += word.split('').reverse().join('');
out += str[i];
word = '';
}
}
return out;
};
console.log(reverse("This is fun, hopefully."));