字符串删除方法
- slice()和substring()第二次参数指定的是字符串最后一个字符后面的位置;
- substr()第二个参数指定返回的字符串个数;
情景模式-参数为正数
var string = 'hello world';
console.log(string.slice(3)); //lo world
console.log(string.substring(3)); //lo world
console.log(string.substr(3)); //lo world
console.log(string.slice(3, 7)); //lo w
console.log(string.substring(3, 7)); //lo w
console.log(string.substr(3, 7)); //lo worl
情景模式-参数为负数
- slice() 会将所有的负数于字符串的长度相加
- substr() 会将第一个负参数与字符串长度相加,第二个负参数转化为 0
- substring() 将所有的负参数转化为 0
var string = 'hello world'; // length = 11
console.log(string.slice(-3)); // rld slice(8)
console.log(string.substring(-3)); //hello world substring(0)
console.log(string.substr(-3)); // rld substr(8)
console.log(string.slice(3, -4)); //lo w slice(3, 7)
console.log(string.substring(3, -4)); //hel substring(3, 0)
console.log(string.substr(3, -4)); // '' substring(3, 0)
正则
参考
/^[+-]?\d+/g
正则由四部分组成
- 元字符,表示匹配内容,. 查找单个字符,\w 字母数字下划线,\d 数字, \s 空白字符, \b 匹配边界
- 量词,表示数量,写在需要匹配的元字符后面如 \d+,+就表示匹配\d的数量
- 量词符号:+ 至少一个, *零个或多个,?零个或一个, {}:{3}匹配三个、{1,3}1-3个,{1,}1-多个
- 括号,[ ]或 [0-9] 0到9中任意字符 [^0-9] 除了0-9其他字符; ()分组 在使用match()时可以获取分组中的内容
- 模式修正符,//g,写在后面,i 不区分大小写, g 匹配多个, m 换行也继续匹配
api
- part.test(text) 匹配到就返回true, part: 匹配规则, test:待匹配字符串
- text.match(part) 返回匹配到的内容
替换空格
function replaceSpace( s ) {
// write code here
return s.split(" ").join("%20")
}
只出现一次字符的位置
- 统计字符的问题可以使用对象的数据结构进行统计
- 然后再通过数组当作key值访问对象,当发现第一个为1时就是答案
function FirstNotRepeatingChar(str)
{
// write code here
let arr = str.split('')
let res = {}
for(let i = 0; i < arr.length; i++) {
if(res[arr[i]]){
res[arr[i]] = res[arr[i]] + 1
}else {
res[arr[i]] = 1
}
}
for(let i = 0; i < arr.length; i++) {
if(res[arr[i]] == 1) {
return i
}
}
return -1
}
左旋转字符串
剑指 str.slice(0,n)截取字符串
function LeftRotateString(str, n)
{
// write code here
if(!str) return ""
return str.slice(n,str.lenght) + str.slice(0,n)
}
翻转单词序列
function ReverseSentence(str)
{
// 法一调用库
let arr = str.split(" ")
return arr.reverse().join(" ")
// 2. 实现库函数方法,trim()为去掉头尾空白符
const reverse = a => {
// 两端指针实现 数组项翻转
const swap = (a, i, j) => [a[i], a[j]] = [a[j], a[i]]
let l = 0, r = a.length - 1
while (l < r) swap(a, l++, r--)
return a
}
return reverse(str.trim().split(/\s+/)).join(' ')
};
}
剑指 Offer 67. 把字符串转换成整数
x**n 相当于 Math.pow(x,n) 即x的n次方 一个*是乘 两个*就是乘方
正则/^[+-]?\d+/
表示开头是+或-,?出现0-1次,\d+数字至少匹配一个- str.trim() 去掉字符串前后空格
var strToInt = function(str) {
const num = str.trim().match(/^[+-]?\d+/)
if(!num) return 0
let INT_MAX = (2**31) - 1
let INT_MIN = - (2**31)
return num >= INT_MAX ? INT_MAX : num <= INT_MIN ? INT_MIN : num
};
表示数值的字符串
剑指 正则表达式
function isNumeric( str ) {
// write code here
str = str.trim()
let exp = /^[+-]?(\d+(\.\d*)?|(\.\d+))([eE][+-]?\d+)?$/
return exp.test(str)
}
module.exports = {
isNumeric : isNumeric
};