substr() 方法能够根据指定的长度来截取子字符串。它包含两个参数,第一个表示开始截取的下标,第二个参数表示截取的长度。
var s = 'https: // lmssee.cn/index.html';
var a = s.substr(s.lastIndexOf('.') + 1, 4);
alert(a); // html
slice() 和 substring() 方法都是根据指定的位置来截取子字符串。它们都包含两个参数,第一个为起始位置,第二个为终止位置。
var s = 'https://www.lmssee.com/information';
var a = s.indexOf('www');
var b = s.indexOf('\/', a);
var c = s.substring(a, b);
var d = s.slice(a, b);
alert(c); // www.lmssee.cn
alert(d); // www.lmssee.cn
alert(c == d); // true
如果第二个参数值比第一个还小,则 substring() 会先交换两个参数,而对于 slice() 来说,就是无效的,返回空的字符串
var s = 'https://www.lmssee.com/information';
var a = s.indexOf('www');
var b = s.indexOf('\/', a);
var c = s.substring(b, a);
var d = s.slice(b, a);
alert(c); // www.lmssee.cn
alert(d); // ""
alert(c == d); // false
如果参数值为负值, slice() 会把负号解释为从右侧开始定位,这与 Array 中的 slice() 方法是相同的但是 substring() 将其视为无效,并返回空的字符串。
var s = 'https://www.lmssee.cn/information';
var a = s.indexOf('www');
var b = s.indexOf('\/', a);
var c = s.substring(-b, -a);
var d = s.slice(-b, -a);
alert(c); // ""
alert(d); // .lmssee.cn/in
alert(c == d); // false
使用 replace() 方法
replace ()的第二个参数是一个函数, replace ()方法给其传递多个实参,这些参数包含一定的意义 。
也就是说,如果不是函数传递形参,直接调用函数的 arguments 属性,同样可以读取到正则表达式中相关匹配的文本信息。
replace() 方法可以替换指定的子字符串,它包含两个参数,第一个表示执行的正则表达式,第二个表示准备替换掉的子字符串。
replace() 方法根据正则表达式进行文字替换,然后返回替换后的字符串的副本,其语法格式如下:
oString.replace(re, replaceText);
参数 RegExp 既可以是包含正则表达式模式或可用标志的正则表达式对象,也可以是 String 对象或文字。如果 RegExp 不是正则表达式对象,它将被转换为字符串,并进行精确的查找。
参数 replaceText 是一个 String 对象或字符串文字,对于 oString 中每个匹配 RegExp 中的位置都用该对象所包含的文字加以替换。该参数也可以是返回文本数据的函数。
var b = s.replace('html', 'htm');
var s = 'https://lmssee.cn/information';
function f(x) {
return x.substring(x.lastIndexOf('.') + 1, x.length - 1);
}
var b = s.replace(/(html)/, f(s));
alert(b); // "https:\/\/lmssee.cn/information"
重复
var s = 'JavaScript';
var b = s.replace(/.*/, '$&$&'); // JavaScriptJavaScript;
左侧文本复用
var s = 'JavaScript';
var b = s.replace(/script/i, '$& != $`'); // JavaScript != Java
右侧文本复用
var s = 'JavaScript';
var b = s.replace(/java/i, '$& is $`'); // JavaScript is Script
使用 $ 替换变量
在需要动态决定替换字符串的文本时可以使用匹配变量,它们都能用来识别最新的匹配以及找出匹配的字符串。
长名 | 短名 | 说明 |
---|---|---|
index | $_ | 是当前表达式模式首次匹配内容的开始位置,从 0 开始计数。其初始值为 -1 。每次成功匹配时, index 属性值都会随之改变。 |
input | 返回当前所作用的字符串,可以简写为$ _ ,其初始值为空字符串 "" 。 | |
lastIndex | 是当前表达式模式首次匹配内容中最后一个字符的下一个位置,从 0 开始计数,常被作为继续搜索时的起始位置。其初始值为 -1 ,表示从起始位置开始搜索。每次成功匹配时, lastIndex 属性值都会随之改变。 |
|
| lastMatch | $& | 是当前表达式模式的最后一个匹配字符串,可以简写为$&。其初始值为空字符串 "" 。每次成功匹配时, lastMatch 属性值都会随之改变。 |
| lastParen | $+ | 如果表达式模式中有括起来的子匹配,是当前表达式模式中最后的子匹配所匹配到的子字符串,可以简写为$ + ,其初始值为空字符串 "" 。每次成功匹配时, lastParen 属性值都会随之改变。 |
| leftContext | $` | 是当前表达式模式最后一个匹配字符串左边的所有内容,可以简写为$ ' (其中 "'" 为键盘上 "Esc" 键下边的反单引号),其初始值为空字符串 "" 。每次成功匹配时,其属性值都会随之改变。
|
| rightContext | &' | 是当前表达式模式最后一个匹配字符串右边的所有内容,可以简写为$ ' ,其初始值为空字符串 "" 。每次成功匹配时,其属性值都会随之改变。 |
| $ 1... $ 9 | $1~$9 | 这些属性是只读的。如果表达式模式中有括起来的子匹配,$ 1... $ 9 属性值分别是第 1 个到第 9 个子匹配所捕获到的内容。如果有超过 9 个以上的子匹配,$ 1... $ 9 属性分别对应最后的 9
个子匹配。在一个表达式模式中,可以指定任意多个带括号的子匹配,但 RegExp 对象只能存储最后的 9 个子匹配的结果。在 RegExp 实例对象的一些方法所返回的结果数组中,可以获得所有圆括号内的子匹配结果。
|
例如下面的代码:
var oString = 'flip-flop';
var RegExp = /(\w+)-(\w+)/g;
//定义正则表达式模式文字
oString = oString.replace(re, ';$1-$2');
// $1 表示第一个 \w+ , $2 表示第二个 \w+ ,第一个 \w+ 匹配 flip ,第二个 \w+ 匹配 flop ,
// 所以 $1-$2 相当于 flip-flop
// 写出结果
console.log(oString);
这将会返回如下的结果: flip-flop
如果改变参数 replaceText 的值,例如下面的代码:
oString = oString.replace(re, ';$1-$1');
// $1-$1 等同于 flip-flip
oString = oString.replace(re, ';$2-$2');
// $2-$2 等同于 flop-flop 再来看下面的代码,这将会把带有空格的字符串倒置:
var oString = 'flip flop'; // 定义正则表达式模式文字,注意区分大小写
var RegExp = /(\S+)(\s+)(\S+)/g;
oString = oString.replace(re, ';$3$2$1');
// $1 表示第一个 \S+ , $3 表示第二个 \S+ , $2 表示 \s+
// 所以 $3$2$1 相当于 flop flip
// 写出结果
console.log(oString); // 返回 flop flip
在 replace ()方法中约定一个特殊的字符( $ ),这个美元符号如果附加一个序号就表示对正则表达式中匹配的子表达式储存的字符串的引用。
例如下面的代码,将使用连字符替换字符串中的空白:
var oString = 'ECMAScript version 5.0 provides many new features.';
var RegExp = /\s/g;
// 定义正则表达式模式文字,这里是匹配空白
oString = oString.replace(re, ';-'); // 用 - 替换空白,返回替换后的字符串
// 写出结果
console.log(oString);
这将会返回如下的结果: ECMAScript-version-5.0-provides-many-new-features.