JavaScript String、Number、RegExp

JavaScript String 和 Numbe.png

所有 JavaScript 数据类型都有 valueOf() 和 toString() 方法。

String

字符串属性

length:返回字符串的长度。

字符串方法

所有字符串方法都会返回新字符串。它们不会修改原始字符串。

查找字符串中的字符

indexof()

返回字符串中指定文本首次出现的位置

lastIndexof()

返回字符串中指定文本最后一次出现的位置

如果未找到文本,indexOf()lastIndexOf() 均返回 -1。两种方法都接受第二个参数(非负值)作为检索的开始位置。

search()

返回字符串中指定文本首次出现的位置

search()无法设置第二个参数作为检索的开始位置。
indexof()无法设置更强大的正则表达式。

提取部分字符串

提取[start,end)部分

slice(start,end)
substring(start,end)
substr(start,length)

区别
substring() 无法接受负的索引。
substr()第二个参数是提取字符串的长度。

替换字符串内容

replace()

默认replace() 只替换首个匹配。默认 replace() 对大小写敏感。
let str = "tom is toms";
console.log(str.replace("tom", "bob"));

转换为大写和小写

toUpperCase() 把字符串转换为大写:
toLowerCase() 把字符串转换为小写:

concat() 方法

连接两个或多个字符串:
let str1 = "hello";
let str2 = "world";
console.log(str1.concat(" ", str2)); //hello world

trim() 方法

删除字符串两端的空白符。

提取字符串字符

charAt(position)

返回字符串中指定下标(位置)的字符:

charCodeAt(position)

返回字符串中指定索引的字符 unicode 编码
var str = "HELLO WORLD";
str.charAt(0);            // 返回 H
str.charCodeAt(0);         // 返回 72

属性访问

var str = "HELLO WORLD";
str[0]; // 返回 H

属性访问有问题,不推荐使用:
如果找不到字符,[ ] 返回 undefined,而 charAt() 返回空字符串。
它是只读的。str\[0] = "A" 不会产生错误(但也不会工作!)
如果希望按照数组的方式处理字符串,可以先把它转换为数组。

split()

把字符串转换为数组

如果省略分隔符,被返回的数组将包含 index [0] 中的整个字符串。
如果分隔符是 "",被返回的数组将是间隔单个字符的数组:

let txt = "a,b,c,d";
console.log(txt.split(",")); //[ 'a', 'b', 'c', 'd' ]
console.log(txt.split(" ")); //[ 'a,b,c,d' ]
console.log(txt.split("|")); //[ 'a,b,c,d' ]
console.log(txt.split("")); //['a', ',', 'b',',', 'c', ',','d']

Number

  • JavaScript 数值始终是 64 位的浮点数
  • 超大或超小的数可通过科学计数法来写
let x = 123e5;    // 12300000
let y = 123e-5;   // 0.00123
  • 精度:整数15位,小数17位。
  • Infinity (或 -Infinity
除以 0(零)也会生成 Infinity:

数值属性

属性 描述
MAX_VALUE 返回 JavaScript 中可能的最大数。
MIN_VALUE 返回 JavaScript 中可能的最小数。
NaN 非数值
NEGATIVE_INFINITY 表示负的无穷大(溢出返回)。
POSITIVE_INFINITY 表示无穷大(溢出返回)。

数值方法

toString()

以字符串返回数值。返回值类型为string
let x = 123;
console.log(x.toString()); //123
console.log("123".toString()); //123
console.log((120 + 3)); //123
把数输出为十六进制、八进制或二进制。
var myNumber = 128;
myNumber.toString(16);     // 返回 80
myNumber.toString(8);      // 返回 200
myNumber.toString(2);      // 返回 10000000

toExponential()

返回字符串值,它包含已被四舍五入并使用指数计数法的数字。参数定义小数点后的字符数:
let x = 9.656;
x.toExponential(2);     // 返回 9.66e+0
x.toExponential(4);     // 返回 9.6560e+0
x.toExponential(6);     // 返回 9.656000e+0

toFixed()

返回字符串值,它包含了指定位数小数的数字。
var x = 9.656;
x.toFixed(0);           // 返回 10
x.toFixed(2);           // 返回 9.66
x.toFixed(4);           // 返回 9.6560
x.toFixed(6);           // 返回 9.656000

toPrecision()

返回字符串值,它包含了指定长度的数字。四舍五入
var x = 9.656;
x.toPrecision();        // 返回 9.656
x.toPrecision(2);       // 返回 9.7
x.toPrecision(4);       // 返回 9.656
x.toPrecision(6);       // 返回 9.65600

valueOf()

以数值返回数值
var x = 123;
x.valueOf();            // 从变量 x 返回 123
(123).valueOf();        // 从文本 123 返回 123
(100 + 23).valueOf();   // 从表达式 100 + 23 返回 123

把变量转换为数值

这些方法并非数字方法,而是全局 JavaScript 方法。

Number() 方法

Number() 可用于把 JavaScript 变量转换为数值,如果无法转换数字,则返回 NaN。

parseInt() 方法

解析一段字符串并返回数值。允许空格。只返回首个数字。
parseInt("10");         // 返回 10
parseInt("10.33");      // 返回 10
parseInt("10 20 30");   // 返回 10
parseInt("10 years");   // 返回 10
parseInt("years 10");   // 返回 NaN

parseFloat() 方法

解析一段字符串并返回数值。允许空格。只返回首个数字。
parseFloat("10");        // 返回 10
parseFloat("10.33");     // 返回 10.33
parseFloat("10 20 30");  // 返回 10
parseFloat("10 years");  // 返回 10
parseFloat("years 10");  // 返回 NaN

RegExp

语法:

/正则表达式主体/修饰符(可选)

方法

字符串方法

  • search()

用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。

let str = "This is a code. Write By Pillar";
let n = str.search(/code/i);
console.log(n);//10
  • replace()

用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

let str = "This is a code. Write By Pillar";
let n = str.replace("code", "word");
console.log(n);//This is a word. Write By Pillar

RegExp 方法

  • test()

用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。

let str = "This is a code. Write By Pillar";
let reg = /code/;
console.log(reg.test(str));//true
  • exec()

该函数返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。

let str = "This is a code. Write By Pillar";
let reg = /code/;
console.log(reg.exec(str));
/*[
  'code',
  index: 10,
  input: 'This is a code. Write By Pillar',
  groups: undefined
]
*/

修饰符

修饰符 描述
i 执行对大小写不敏感的匹配。
g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
m 执行多行匹配。

模式

  • 方括号用于查找某个范围内的字符:
表达式 描述
[abc] 查找方括号之间的任何字符。
[0-9] 查找任何从 0 至 9 的数字。
(x l y) 查找任何以 l 分隔的选项。
  • 元字符是拥有特殊含义的字符:
元字符 描述 元字符 描述
d 查找数字 D 非数字
s 查找空白字符 S 非空白字符
w 数字字母下划线 W 非数字字母下划线
b 匹配单词边界 . 任意字符
l [^] 取反
^ 正则表达式开始匹配的位置 $ 结束的位置
uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。
  • 量词
量词 描述
n+ 匹配任何包含一个或多个 n 的字符串。
n* 匹配任何包含零个或多个 n 的字符串。
n? 匹配任何包含零个或一个 n 的字符串。
X{n} 出现n次X
X{n,} 至少出现n次X
X{n,m} 至少出现n次,最多出现m次X

应用

邮箱的正则表达式:

^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$

手写字符串trim方法

String.prototype.trim = function (){
    return this.replace(/^\s+/,'').replace(/\s+$/,'')
}
阅读 393

推荐阅读