RegExp.exec

来自:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec

Summary

Executes a search for a match in a specified string. Returns a result array, or null.

(在指定的字符串中寻找匹配。返回结果数组,或者null。)

Method of RegExp
Implemented inJavaScript 1.2
ECMAScript EditionECMAScript 3rd Edition

Syntax

result = regexp.exec(str)

Parameters

regexp
The name of the regular expression. It can be a variable name or a literal.(正则表达式的名字。可以是变量的名字或者是字面量)
str
The string against which to match the regular expression.(对这个字符串正则表达式匹配)

Return value

If the match succeeds, the exec method returns an array and updates properties of the regular expression object.(如果匹配成功,exec方法返回数组并更新正则表达式对象的属性。) The returned array has the matched text as the first item, and then one item for each capturing parenthesis that matched containing the text that was captured.

If the match fails, the exec method returns null.

If you are executing a match simply to find true or false, use the RegExp test method or the String search method.

Consider the following example:

<script>
// Match one d followed by one or more b's followed by one d
// Remember matched b's and the following d
// Ignore case
var re = /d(b+)(d)/ig;
var result = re.exec("cdbBdbsbz");
console.log(result[0]);//dbBd
console.log(result[1]);//bB
console.log(result[2]);//d
console.log(result[3]);//undefined
console.log(result.index);//1
console.log(result.input);//cdbBdbsbz
console.log(re.lastIndex);//5 
console.log(re.ignoreCase);//true
console.log(re.global);//true
console.log(re.multiline);//false
console.log(re.source);//d(b+)(d) 
</script>

 

The following table shows the results for this script:

ObjectProperty/IndexDescriptionExample
result[0]The last matched charactersdbBd
[1], ...[n]The parenthesized substring matches, if any. The number of possible parenthesized substrings is unlimited.[1] = bB
[2] = d
indexThe 0-based index of the match in the string.1
inputThe original string.cdbBdbsbz
relastIndexThe index at which to start the next match.5
ignoreCaseIndicates if the "i" flag was used to ignore case.true
globalIndicates if the "g" flag was used for a global match.true
multilineIndicates if the "m" flag was used to search in strings across multiple line.false
sourceThe text of the pattern.d(b+)(d)

Notes

Finding successive matches

If your regular expression uses the "g" flag, you can use the exec method multiple times to find successive matches in the same string. When you do so, the search starts at the substring of str specified by the regular expression's lastIndex property (test will also advance the lastIndex property). For example, assume you have this script:

<script>
var myRe = /ab*/g;
var str = "abbcdefabh";
var myArray;
while ((myArray = myRe.exec(str)) !== null)
{
  var msg = "Found " + myArray[0] + ".  ";
  msg += "Next match starts at " + myRe.lastIndex;
  console.log(msg);
}
</script>

 

This script displays the following text:

Found abb. Next match starts at 3
Found ab. Next match starts at 9

Note: Do not place the regular expression literal (or RegExp constructor) within the while condition or it will create an infinite loop if there is a match due to the lastIndex property being reset upon each iteration.

Using exec() with RegExp literals

You can also use exec() without creating a RegExp object:

<script>
var matches = /(hello \S+)/.exec('This is a hello world!');
alert(matches[1]);
</script>

This will display an alert containing 'hello world!';

Calling exec() with no parameters in old Gecko versions

Gecko 8.0 note
(Firefox 8.0 / Thunderbird 8.0 / SeaMonkey 2.5)

Prior to Gecko 8.0 (Firefox 8.0 / Thunderbird 8.0 / SeaMonkey 2.5), exec() was implemented incorrectly; when it was called with no parameters, it would match against the value of the previous input (RegExp.input property) instead of against the string "undefined". This is fixed; now /undefined/.exec() correctly results in ['undefined'], instead of an error.

 

<script>
var matches = /undefined/.exec("");
alert(matches);
matches = /undefined/.exec();
alert(matches[1]);//undefined
matches = /undefined/.exec("undefined");
alert(matches[1]);//undefined
</script>

 

转载于:https://www.cnblogs.com/ghgyj/p/3315946.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值