三、JavaScript 函数
JavaScript 提供了一个名为RegExp
的对象。您可以通过使用new
或文字//
来创建一个实例。
RegExp 对象
我将从一个概述开始,然后是几个例子。
方法
除了RegExp
对象,您可以在 JavaScript 中使用几个内置的字符串函数来处理正则表达式。对象知道这些方法:
exec()
:执行测试并返回第一次命中。test()
:执行测试并返回true
或false
。toString()
:以字符串形式返回表达式。
exec
方法返回一个包含以下内容的对象:
- 包含组的数组(仅计数组):
- 第一个捕获在索引[0]中
- 如果有更多的组,这些组遵循[1]..[n]
- 名为
index
的属性包含第一次命中的位置,其值从零开始。 - 名为
input
的属性包含搜索到的文本。
RegExp
对象本身包含更多的信息。当然,您找到了表达式的定义,也找到了迭代到进一步结果的方法(因为exec
只返回第一个结果)。
Option g
如果您希望有多个匹配项,您应该使用选项g
,这意味着“全局”并在第一个匹配项之后继续搜索。
下面的脚本包含一个非常简单的表达式,它导致了多次点击。同一表达式的后续调用通过增加内部指针贯穿所有命中。这迫使do
-循环进行迭代。
1 var text = "Than Ann answers all questions again.";
2 var patt = /a/g;
3 var match = patt.exec(text);
4 console.log(match[0] + " found at " + match.index);
5
6 match = patt.exec(text);
7 do {
8 match = patt.exec(text);
9 if (!match) break;
10 console.log(match[0] +
11 " found at " + match.index);
12 } while(true);
输出显示结果,如图 3-1 所示。
图 3-1。
Output of the script
性能
以下是一些有助于保持表达式灵活性的属性:
constructor
:创建RegExp
对象的函数。global
:检查选项g
(布尔),全局。ignoreCase
:检查选项i
(布尔值),不区分大小写。lastIndex
:最后一次点击的索引。multiline
:检查选项m
(布尔值),多行。source
:表情本身。
以下脚本显示了lastIndex
属性的作用:
1 var text = "Than Ann answers all questions again.";
2 var patt = /a/g;
3 var match = patt.exec(text);
4 console.log(match[0] + " found at " + match.index);
5
6 match = patt.exec(text);
7 do {
8 match = patt.exec(text);
9 if (!match) break;
10 console.log(match[0] + " found at " + match.index);
11 console.log( "Further search at " + patt.lastIndex);
12 } while(true);
输出显示结果,如图 3-2 所示。
图 3-2。
Output of the script
动态性能
如果表达式中有组,它们将显示为动态属性。名字分别是$1
到$9
。如果你不想让一群人这样被抓,考虑使用非计数组(?:)
。
1 var patt = /(abc)|(def)/;
2 var text = "anton def";
3 console.log(patt.test(text));
4 console.log(RegExp.$1);
第二个输出(第 4 行)返回第一个匹配的内容。那其实就是def
。
字面形式
文字形式是创建表达式的最简单方法:
1 var patt = /web/i;
2 patt.test("Look for our Web courses!");
这只是返回true
。结尾没有了i
,结果就是false
。i
取消了区分大小写,使“web”与“Web”匹配,反之亦然。你甚至可以把这个和exec
结合起来:
1 /web/i.exec("Look for our Web courses!");
这将返回一个对象,在第一个位置点击“Web ”,值为 13 用于index
。如果没有命中,exec
简单地返回null
。使用if(//.exec(""))
来处理这个问题,因为 JavaScript 会将null
视为false
。使用new
操作符,它看起来像这样:
1 var patt = new RegExp("web");
Literals and Regex
虽然//
对 RegExp 有效,但常规字符串在这里也适用——但仅限于这里。
执行选项
已经显示了一些选项。选项不是表达式的一部分;相反,它们修改 regex 引擎的行为。
var pattern = /[A-Z]/i;
以下是所有可用的选项:
i
:搜索时不区分大小写g
:全局搜索,即使已经找到匹配项m
:在多行中搜索(如果没有,行尾会停止搜索)
字符串函数
正则表达式不限于RegExp
对象。一些常规字符串函数也可以处理这些表达式。
概观
增强了以下函数来处理表达式:
search
replace
match
split
1 var str = "Look for our Web courses!";
2 var res = str.search(/Web/i);
3 console.log(res);
res
变量包含 13。这是点击量的指数。没有命中,你得到-1。
如果需要布尔值,只需使用match
:
1 var str = "Look for our Web courses!";
2 var res = str.match(/Web/);
3 if (res) {
4 console.log("Hit");
5 } else {
6 console.log("No Hit");
7 }
这里你在控制台上被击中。用replace
挺像的:
1 var str = "Look for our Web courses!";
2 var res = str.replace(/Web/i, ".NET");
3 console.log(res);
res
变量现在包含了查找我们的。网络课程!。
版权属于:月萌API www.moonapi.com,转载请注明出处