logo

哈达波斯网|专注网站

脚本

JavaScript 字符串

脚本  2019/2/18 12:41:12  管理员  

字符串属性

constructor	返回创建字符串属性的函数
length	    返回字符串的长度
prototype	允许您向对象添加属性和方法

字符串方法

不改变原字符串:

str.charAt(index) // 返回指定位置的字符
str.charCodeAt(index) // 返回指定位置的字符的 Unicode 编码
str.concat(string1, string2, ..., stringX) // 链接两个或多个字符串
// 以下两个方法第二个参数都可选,若指定start,则从该位置开始向后或向前检索
str.indexOf(value, start) // 返回某个指定的字符串值在字符串中首次出现的位置(区分大小写)
str.lastIndexOf(value, start) // 返回一个指定的字符串值最后出现的位置
str.match(regexp) // 在字符串内检索指定的值,或找到一个或多个正则表达式的匹配
str.replace(searchvalue, newvalue) // 在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串
str.search(searchvalue) // 检索指定的子字符串,或检索与正则表达式相匹配的子字符串,返回匹配到字符串的起始下标
str.slice(start, end) // 提取字符串的某个部分,并返回被提取的部分(新字符串)end 可选,下面有详解
str.substring(from, to) // 提取字符串中介于两个指定下标之间的字符,不包括下标 to(若未指定第二个参数,则会一直提取到字符串末尾)
str.substr(start, length) // 在字符串中提取从下标开始的指定数目的字符,可代替 substring() 和 slice() 来使用,下面有详解
str.split(separator, limit) // 把一个字符串分割成字符串数组 (limit:可选,指定返回的数组的最大长度,返回的数组不会大于这个长度)
str.toLowerCase() // 把字符串转换为小写
str.toUpperCase() // 把字符串转换为大写
str.includes() // 判断字符串是否包含某个子串
str.trim() // 去除字符串两边的空白
str.valueOf() // 返回 String 对象的原始值
str.repeat(n) // 返回 str 重复 n 次的新字符串


创建字符串:

String.fromCharCode(n1, n2, ..., nX) // 可接受一个或多个指定的 Unicode 值,然后返回一个字符串

删除指定子串

// 可以使用 replace 来删除

讲一下 slice 方法 (面试)

str.slice(start, end)

// 两个参数
// 使用 start(包含此下标) 和 end(不包含此下标) 参数来指定字符串提取的部分
start   必须,要提取字符串片断的起始下标。第一个字符下标为 0,如果该参数是负数,则从字符串尾部开始算起的位置
        (-1:倒数第一个字符,-2:倒数第二个字符)
end     可选,紧接着要截取的片段结尾的下标。若未指定此参数,则要提取的子串包括 start 到原字符串结尾的字符串。
        如果该参数是负数,则从字符串尾部开始算起的位置(-1:倒数第一个字符,-2:倒数第二个字符)

// 提取所有字符串 参数为0
let str = 'hello world!';
let n = str.slice(0); // 全部打印原字符串

// 从字符串的起始下标 3 开始提取字符串片段
let str = 'Hello world!';
let n = str.slice(3); // 打印:lo world!

// 从字符串的起始下标 3 提取到下标为 8(不包括 8)的字符串片段
let str = 'Hello world!';
let n = str.slice(3,8); // 打印:lo wo

// 只提取第1个字符
let str = 'Hello world!';
let n = str.slice(0,1); // 打印: H

// 提取最后一个字符
let str = 'Hello world!';
let n = str.slice(-1); // 打印:!

// 提取最后三个字符
let str = 'Hello world!';
let n = str.slice(-3); // 打印:ld!


实现字符串逆序(面试)

简单思路,字符串没有 reverse,数组有,所以可以利用数组的 reverse 方法

'12345'.split('').reverse().join('');
// 打印 '54321'

讲一下 substr 方法 (面试)

str.substr(start, length)

// 两个参数
// 使用 start(包含此下标) 和 length(提取的字符数) 参数来指定字符串提取的部分
start   必须,要提取字符串片断的起始下标。第一个字符下标为 0,如果该参数是负数,则从字符串尾部开始算起的位置
        (-1:倒数第一个字符,-2:倒数第二个字符)
length  可选,子串中的字符数,必须是数值。如果省略了该参数,那么返回的是从 start(第一个参数) 位置到结尾的字串

// 提取所有字符串 参数为0
let str = 'hello world!';
let n = str.substr(0); // 全部打印原字符串

// 从字符串的起始下标 3 开始提取字符串片段
let str = 'Hello world!';
let n = str.substr(3); // 打印:lo world!

// 从字符串的起始下标 3 开始提取 5 个字符
let str = 'Hello world!';
let n = str.substr(3,5); // 打印:lo wo

// 只提取第1个字符
let str = 'Hello world!';
let n = str.substr(0,1); // 打印: H

// 提取最后一个字符
let str = 'Hello world!';
let n = str.substr(-1); // 打印:!

// 提取最后三个字符
let str = 'Hello world!';
let n = str.substr(-3); // 打印:ld!


java 中 replace 与 replaceAll 的区别

    javascript 没有 replaceAll

    相同点:都是全部替换,即把源字符串中的某一字符或字符串全部换成指定的字符或字符串;

    不同点:replaceAll支持正则表达式,因此会对参数进行解析(两个参数均是),如通过 replaceAll("\d", “") 把一个字符串所有的数字字符都换成星号;而 replace 则不会,replace("\d","”) 就是替换"\d"的字符串,而不会解析为正则。

    还有一个不同点:“\”在java中是一个转义字符,所以需要用两个代表一个。例如 System.out.println( “\” ) ;只打印出一个""。但是“\”也是正则表达式中的转义字符,需要用两个代表一个。

    所以:\\被java转换成\,\又被正则表达式转换成\

    因此用 replaceAll 替换“\”为"\",就要用 replaceAll("\\","\\\\"),而 replace 则replace("\","\\")

ASCII、Unicode 和 UTF-8 编码的区别

15504648898870161.jpg

JS判断字符串长度

(英文占1个字符,中文汉字占2个字符)

// 方法一:// Unicode 编码String.prototype.gblen = () => {    
  let len = 0;    
  for (let i=0; i<this.length; i++) {    
    if (this.charCodeAt(i) > 127 || this.charCodeAt(i) === 94) {    
      len += 2;    
    } else {    
      len++;    
    }    
  }    
  return len;    
}// 方法二:// Unicode 编码let strlen = str => {  let len = 0;  
  for (let i=0; i<str.length; i++) {   
    let c = str.charCodeAt(i);   
    // 单字节加1   
    if ((c >= 0x0001 && c <= 0x007e) || (0xff60 <= c && c <= 0xff9f)) {   
      len++;   
    }   
    else {   
      len += 2;   
    }   
  }   
  return len;  
}  
// 方法三:// Unicode 编码let jmz = {};  
jmz.GetLength = str => {  let realLength = 0, len = str.length, charCode = -1;  
  for (let i = 0; i < len; i++) {
    charCode = str.charCodeAt(i);  
    if (charCode >= 0 && charCode <= 128) {
      realLength += 1;
    } else {
      realLength += 2;
    }
  }  
  return realLength;  
};  
// 方法四:// Unicode 编码let l = str.length;   
let blen = 0;   
for (i = 0; i < l; i++) {   
  if ((str.charCodeAt(i) & 0xff00) != 0) {   
    blen++;   
  }   
  blen++;   
}// 方法五:// 把双字节的替换成两个单字节的然后再获得长度getBLen = str => {  
  if (str != null) {    if (typeof str != "string") {  
      str += "";  
    }  
    return str.replace(/[^\x00-\xff]/g,"01").length;  
  } else {    // TODO
    return 0;
  } 
}

问题

去掉字符串中所有空格(正则表达式)

去掉字符串首尾空格用 trim()

handleLinkBlur () {
  this.link = this.link.replace(/\s*/g, '');
},

用正则表达式实现 trim()

function myTrim(str) {
  let reg = /^\s+|\s+$/g;
  return str.replace(reg, "");
}
console.log(myTrim('    asdf    '));


本文由 Krry 创作

网站首页  | 最新公告  | 漏洞修补  | 网站模板  | 知识文档  | 与我联系
Copyright © 2015 jlasp.com All Rights Reserved.
哈达波斯网|专注网站 版权所有
地址:吉林省吉林市昌邑区 联系QQ:383612004 联系人:董先生
未经本站授权,禁止复制或建立镜像,内容仅用于学习参考!
ICP备案号:吉ICP备15000891号-1 | 

吉公网安备 22020202000301号