JavaScript基础:字符串翻转与回文检测实现
本文详解JavaScript中字符串翻转与回文检测的实现方法。通过split、reverse、join组合实现基础翻转,利用正则表达式过滤非字母数字字符完成回文判断。此外还对比了双指针法与递归算法,帮助开发者掌握字符串处理核心技巧。
字符串翻转实现
字符串翻转
字符串翻转(Reverse a String)旨在将给定字符串的顺序完全倒置。例如,输入字符串“hello”,处理后的结果应为“olleh”。
测试用例
reverseString("hello")应该返回 “olleh”reverseString("Greetings from Earth")应该返回 “htraE morf sgniteerG”
实现思路
最便捷的方法是将字符串转换为数组,对数组进行反转操作,最后再拼接回字符串。此过程需调用字符串对象与数组对象的内置方法:
String.split()Array.reverse()Array.join()
具体可以去看JavaScript参考手册
function reverseString(str) {
return str.split('').reverse().join('');
}
reverseString("hello");
一句return搞定,很简单有木有?!
在此基础上来看看回文是怎么玩的⬇️
回文检测逻辑
回文
“Madam,I'mAdam.” 这是亚当在伊甸园里碰上夏娃说的第一句话,这句话正着读和反着读一模一样,这样的句子就是回文,英文里叫Palindrome。
举个栗子——“上海自来水来自海上”,这句话顺着读和反着读都是相同的,还有很多英语单词也是:Level、Madam、Radar、LOL(哈哈哈)…
测试用例
palindrome("Race Car")应该返回 truepalindrome("not a palindrome")应该返回 falsepalindrome("0_0 (: /-\ :) 0-0")应该返回 true
实现思路
我们需要写一个叫palindrome()的方法,传入一个叫str的参数,如果str是一个Palindromes将返回true,反之为false。
需要注意将标点符号和空格去掉并toUpperCase or toLowerCase后再进行判断。
需要用到以下知识点:
- 正则表达式 (regular expression) ,用来过滤符号和空格
String.replace()替换与正则表达式匹配的子串String.toLowerCase()把字符串转换为小写
正则表达式详解
关于正则表达式
这里要求匹配大小写英文字母和整数,任何标点符合和空格将被过滤掉。所以可以使用 /[^A-Za-z0–9]/g 或者 /[\W_]/g
- [^A-Z] 匹配非26个大写字母中的任意一个
- [^a-z] 匹配非26个小写字母中的任意一个
- [^0-9] 匹配非0到9中的任意一个数字
- [^_] 匹配非下划线
- ^ 匹配字符串的开始
- \w 注意是小写,匹配字母或数字或下划线或汉字
- \W 注意是大写,匹配任意不是字母、数字、下划线、汉字的字符,等价于[^A-Za-z0-9_]
- g 表示全局搜索
多种算法对比
这是我的方法:
function palindrome(str) {
str = str.replace(/[\W_]/g,'').toLowerCase();
var reverseStr = str.split('').reverse().join('');
return str===reverseStr;
}
palindrome("eye");
我在网上看到还可以用For循环来实现:
function palindrome (str) {
var reg = /[\W_]/g,
regStr = str.toLowerCase().replace(reg, ''),
len = regStr.length;
for (var i = 0, halfLen = len / 2; i < halfLen; i++){
if (regStr[i] !== regStr[len - 1 - i]) {
return false;
}
}
return true;
}
这个思路很巧妙的运用了回文的特点,把整个字符串切成一半,循环遍历并依次判断首尾字符是否相等。
还有个运用了递归的实现:
function palindrome (str) {
// 删除字符串中不必要的字符
var re = /[\W_]/g;
// 将字符串变成小写字符
var lowRegStr = str.toLowerCase().replace(re, '');
// 如果字符串lowRegStr的length长度为0时,字符串即是palindrome
if (lowRegStr.length === 0) {
return true;
}
// 如果字符串的第一个和最后一个字符不相同,那么字符串就不是palindrome
if (lowRegStr[0] !== lowRegStr[lowRegStr.length - 1]) {
return false;
} else {
return palindrome(lowRegStr.slice(1, lowRegStr.length - 1));
}
}
感觉另外两个实现思路比我屌多了,自己在编程的路上才走没多远,一步一步来吧。
对了,别纠结翻转字符串和回文的区别了!翻转字符串仅仅是将倒序后的字符串返回;而回文面对的则是更长更复杂的句子,需要将过滤掉空格和标点符号的句子和倒序后的句子比较是否相等。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用Javascript能带来一定的帮助,如果有疑问大家可以留言交流。谢谢大家对本站的支持。
JS处理含Emoji或中文的字符串转数组乱码问题
2026-11-05 16:12:28
JS怎么使用展开运算符合并对象
2026-11-05 14:42:18
ES6+环境下判断JS对象为空的简洁写法
2026-11-05 12:12:23
怎么通过replacer函数自定义JS中JSON的格式化输出
2026-11-05 11:19:44
JS正则表达式基础:字面量与RegExp构造函数的区别及常用元字符
2026-11-05 11:16:58
