2019-04-21 11:50:48 +08:00

323 lines
25 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<article id="wikiArticle">
<div></div>
<p><strong><code>replace()</code></strong> 方法返回一个由替换值(<code>replacement</code>)替换一些或所有匹配的模式(<code>pattern</code>)后的新字符串。模式可以是一个字符串或者一个<a href="Reference/RegExp">正则表达式</a>,替换值可以是一个字符串或者一个每次匹配都要调用的回调函数。</p>
<p>原字符串不会改变。</p>
<div><iframe class="interactive interactive-js" frameborder="0" height="250" src="https://interactive-examples.mdn.mozilla.net/pages/js/string-replace.html" width="100%"></iframe></div>
<p class="hidden">The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a class="external" href="https://github.com/mdn/interactive-examples" rel="noopener">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p>
<h2 id="语法">语法</h2>
<pre><code class="language-javascript"><code><var>str</var>.replace(<var>regexp</var>|<var>substr</var>, <var>newSubStr</var>|<var>function</var>)</code></code></pre>
<h3 id="参数">参数</h3>
<dl>
<dt><code>regexp </code>(pattern)</dt>
<dd>一个<a href="Reference/RegExp" title="此页面仍未被本地化, 期待您的翻译!"><code>RegExp</code></a> 对象或者其字面量。该正则所匹配的内容会被第二个参数的返回值替换掉。</dd>
</dl>
<dl>
<dt><code>substr </code>(pattern)</dt>
<dd>一个将被 <code>newSubStr</code> 替换的 <a href="Reference/String" title="此页面仍未被本地化, 期待您的翻译!"><code>字符串</code></a>。其被视为一整个字符串,而不是一个正则表达式。仅第一个匹配项会被替换。</dd>
</dl>
<dl>
<dt><code>newSubStr</code> (replacement)</dt>
<dd>用于替换掉第一个参数在原字符串中的匹配部分的<a href="Reference/String" title="此页面仍未被本地化, 期待您的翻译!"><code>字符串</code></a>。该字符串中可以内插一些特殊的变量名。参考下面的<a href="#使用字符串作为参数">使用字符串作为参数</a></dd>
</dl>
<dl>
<dt><code>function</code> (replacement)</dt>
<dd>一个用来创建新子字符串的函数,该函数的返回值将替换掉第一个参数匹配到的结果。参考下面的<a href="#指定一个函数作为参数">指定一个函数作为参数</a></dd>
</dl>
<h3 id="返回值">返回值</h3>
<p>一个部分或全部匹配由替代模式所取代的新的字符串。</p>
<h2 id="描述">描述</h2>
<p>该方法并不改变调用它的字符串本身,而只是返回一个新的替换后的字符串。</p>
<p>在进行全局的搜索替换时,正则表达式需包含 <code>g</code> 标志。</p>
<h3 id="使用字符串作为参数">使用字符串作为参数</h3>
<p>替换字符串可以插入下面的特殊变量名:</p>
<table class="fullwidth-table">
<tbody>
<tr>
<td class="header">变量名</td>
<td class="header">代表的值</td>
</tr>
<tr>
<td><code>$$</code></td>
<td>插入一个 "$"。</td>
</tr>
<tr>
<td><code>$&amp;</code></td>
<td>插入匹配的子串。</td>
</tr>
<tr>
<td><code>$`</code></td>
<td>插入当前匹配的子串左边的内容。</td>
</tr>
<tr>
<td><code>$'</code></td>
<td>插入当前匹配的子串右边的内容。</td>
</tr>
<tr>
<td style="white-space: nowrap;"><code>$<em>n</em></code></td>
<td>
<p>假如第一个参数是 <a href="Reference/RegExp" title="此页面仍未被本地化, 期待您的翻译!"><code>RegExp</code></a>对象,并且 n 是个小于100的非负整数那么插入第 n 个括号匹配的字符串。提示索引是从1开始</p>
</td>
</tr>
</tbody>
</table>
<h3 id="指定一个函数作为参数">指定一个函数作为参数</h3>
<p>你可以指定一个函数作为第二个参数。在这种情况下,当匹配执行后,该函数就会执行。 函数的返回值作为替换字符串。 (注意:上面提到的特殊替换参数在这里不能被使用。) 另外要注意的是,如果第一个参数是正则表达式,并且其为全局匹配模式,那么这个方法将被多次调用,每次匹配都会被调用。</p>
<p>下面是该函数的参数:</p>
<table class="fullwidth-table">
<tbody>
<tr>
<td class="header">变量名</td>
<td class="header">代表的值</td>
</tr>
<tr>
<td><code>match</code></td>
<td>匹配的子串。(对应于上述的$&amp;。)</td>
</tr>
<tr>
<td><code>p1,p2, ...</code></td>
<td>
<p>假如replace()方法的第一个参数是一个<a href="Reference/RegExp" title="此页面仍未被本地化, 期待您的翻译!"><code>RegExp</code></a> 对象则代表第n个括号匹配的字符串。对应于上述的$1$2等。例如如果是用 <code>/(\a+)(\b+)/</code> 这个来匹配,<code>p1</code> 就是匹配的 <code>\a+</code><code>p2</code> 就是匹配的 <code>\b+</code></p>
</td>
</tr>
<tr>
<td><code>offset</code></td>
<td>
<p>匹配到的子字符串在原字符串中的偏移量。(比如,如果原字符串是 <code>'abcd'</code>,匹配到的子字符串是 <code>'bc'</code>,那么这个参数将会是 1</p>
</td>
</tr>
<tr>
<td><code>string</code></td>
<td>被匹配的原字符串。</td>
</tr>
</tbody>
</table>
<p>(精确的参数个数依赖于 <code>replace()</code> 的第一个参数是否是一个正则表达式(<a href="Reference/RegExp" title="此页面仍未被本地化, 期待您的翻译!"><code>RegExp</code></a>)对象,以及这个正则表达式中指定了多少个括号子串。)</p>
<p>下面的例子将会使 <code>newString</code> 变成 <code>'abc - 12345 - #$*%'</code></p>
<pre><code class="language-javascript">function replacer(match, p1, p2, p3, offset, string) {
// p1 is nondigits, p2 digits, and p3 non-alphanumerics
return [p1, p2, p3].join(' - ');
}
var newString = 'abc12345#$*%'.replace(/([^\d]*)(\d*)([^\w]*)/, replacer);
console.log(newString); // abc - 12345 - #$*%
</code></pre>
<h2 id="Examples" name="Examples">示例</h2>
<h3 id="在_replace()_中使用正则表达式"><code>replace()</code> 中使用正则表达式</h3>
<p>在下面的例子中,<code>replace()</code> 中使用了正则表达式及忽略大小写标示。</p>
<pre><code class="language-javascript">var str = 'Twas the night before Xmas...';
var newstr = str.replace(/xmas/i, 'Christmas');
console.log(newstr); // Twas the night before Christmas...
</code></pre>
<h3 id="在_replace()_中使用_global_和_ignore_选项"><code>replace()</code> 中使用 <code>global</code><code>ignore</code> 选项</h3>
<p>下面的例子中,正则表达式包含有全局替换(g)和忽略大小写(i)的选项,这使得replace方法用'oranges'替换掉了所有出现的"apples".</p>
<pre><code class="language-javascript">var re = /apples/gi;
var str = "Apples are round, and apples are juicy.";
var newstr = str.replace(re, "oranges");
// oranges are round, and oranges are juicy.
console.log(newstr);
</code></pre>
<h3 id="交换字符串中的两个单词">交换字符串中的两个单词</h3>
<p>下面的例子演示了如何交换一个字符串中两个单词的位置,这个脚本使用$1 和 $2 代替替换文本。</p>
<pre><code class="language-javascript">var re = /(\w+)\s(\w+)/;
var str = "John Smith";
var newstr = str.replace(re, "$2, $1");
// Smith, John
console.log(newstr);
</code></pre>
<h3 id="使用行内函数来修改匹配到的字符。">使用行内函数来修改匹配到的字符。</h3>
<p>在这个例子中,所有出现的大写字母转换为小写,并且在匹配位置前加一个连字符。重要的是,在返回一个替换了的字符串前需要在匹配元素前需要进行添加操作。</p>
<p>在返回前,替换函数允许匹配片段作为参数,并且将它和连字符进行连接作为新的片段。</p>
<pre><code class="language-javascript">function styleHyphenFormat(propertyName) {
function upperToHyphenLower(match) {
return '-' + match.toLowerCase();
}
return propertyName.replace(/[A-Z]/g, upperToHyphenLower);
}
</code></pre>
<p>运行 <code style="font-size: 1rem; letter-spacing: -0.00278rem;">styleHyphenFormat('borderTop')</code><code style="font-size: 1rem; letter-spacing: -0.00278rem;"></code><span style="background-color: #ffffff; font-family: Arial,x-locale-body,sans-serif; font-size: 1rem; letter-spacing: -0.00278rem;"></span><span style="background-color: #ffffff; font-family: Arial,x-locale-body,sans-serif; font-size: 1rem; letter-spacing: -0.00278rem;">返回 'border-top'。</span></p>
<p>因为我们想在最终的替换中进一步转变匹配结果,所以我们必须使用一个函数。这迫使我们在使用<a href="Reference/Global_Objects/String/toLowerCase" title="toLowerCase() 会将调用该方法的字符串值转为小写形式,并返回。"><code>toLowerCase()</code></a>方法前进行评估。如果我们尝试不用一个函数进行匹配,那么使用<a href="Reference/Global_Objects/String/toLowerCase" title="toLowerCase() 会将调用该方法的字符串值转为小写形式,并返回。"><code>toLowerCase()</code></a> 方法将不会有效。</p>
<pre><code class="language-javascript">var newString = propertyName.replace(/[A-Z]/g, '-' + '$&amp;'.toLowerCase()); // won't work
</code></pre>
<p>这是因为 <code>'$&amp;'.toLowerCase()</code> 会先被解析成字符串字面量(这会导致相同的'$&amp;')而不是当作一个模式。</p>
<h3 id="将华氏温度转换为对等的摄氏温度">将华氏温度转换为对等的摄氏温度</h3>
<p>下面的例子演示如何将华氏温度转换为对等的摄氏温度。华氏温度用一个数字加一个"F"来表示,这个函数将返回一个数字加"C"来表示的摄氏温度。例如,如果输入是 212F这个函数将返回 100C。如果输入的数字是 0F这个方法将返回 "-17.77777777777778C"。</p>
<p>正则表达式test检查任何数字是否以 F 结尾。华氏温度通过第二个参数p1进入函数。这个函数基于华氏温度作为字符串传递给f2c函数设置成摄氏温度。然后f2c()返回摄氏温度。这个函数与Perl的 s///e 标志相似。</p>
<pre><code class="language-javascript">function f2c(x)
{
function convert(str, p1, offset, s)
{
return ((p1-32) * 5/9) + "C";
}
var s = String(x);
var test = /(\d+(?:\.\d*)?)F\b/g;
return s.replace(test, convert);
}
</code></pre>
<h3 id="使用行内函数和正则来避免循环">使用行内函数和正则来避免循环</h3>
<p>下例把某种模式的字符串转换为一个对象数组(其元素为对象)。</p>
<p><strong>输入:</strong><br/>
一个由 x- 和 _ 组成的字符串。</p>
<pre>x-x_
---x---x---x---
-xxx-xx-x-
_x_x___x___x___
</code></pre>
<p><strong>输出:</strong></p>
<p>一个数组对象。'x' 产生一个 'on' 状态,'-'(连接符)产生一个 'off' 状态,而 '_' (下划线)表示 'on' 状态的长度。</p>
<pre><code class="language-javascript">[
{ on: true, length: 1 },
{ on: false, length: 1 },
{ on: true, length: 2 }
...
]</code></pre>
<p>代码片段:</p>
<pre><code class="language-javascript">var str = 'x-x_';
var retArr = [];
str.replace(/(x_*)|(-)/g, function(match, p1, p2) {
if (p1) { retArr.push({ on: true, length: p1.length }); }
if (p2) { retArr.push({ on: false, length: 1 }); }
});
console.log(retArr);</code></pre>
<p>该代码片段生成了一个数组,包含三个期望格式的对象,避免了使用 for 循环语句。</p>
<h2 id="规范">规范</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">Specification</th>
<th scope="col">Status</th>
<th scope="col">Comment</th>
</tr>
<tr>
<td><a class="external" href="https://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%203rd%20edition,%20December%201999.pdf" hreflang="en" lang="en" rel="noopener" title="ECMAScript 3rd Edition (ECMA-262)">ECMAScript 3rd Edition (ECMA-262)</a></td>
<td><span class="spec-Standard">Standard</span></td>
<td>Initial definition. Implemented in JavaScript 1.2.</td>
</tr>
<tr>
<td><a class="external" href="https://www.ecma-international.org/ecma-262/5.1/#sec-15.5.4.11" hreflang="en" lang="en" rel="noopener">ECMAScript 5.1 (ECMA-262)<br/><small lang="zh-CN">String.prototype.replace</small></a></td>
<td><span class="spec-Standard">Standard</span></td>
<td> </td>
</tr>
<tr>
<td><a class="external" href="https://www.ecma-international.org/ecma-262/6.0/#sec-string.prototype.replace" hreflang="en" lang="en" rel="noopener">ECMAScript 2015 (6th Edition, ECMA-262)<br/><small lang="zh-CN">String.prototype.replace</small></a></td>
<td><span class="spec-Standard">Standard</span></td>
<td> </td>
</tr>
<tr>
<td><a class="external" href="https://tc39.github.io/ecma262/#sec-string.prototype.replace" hreflang="en" lang="en" rel="noopener">ECMAScript Latest Draft (ECMA-262)<br/><small lang="zh-CN">String.prototype.replace</small></a></td>
<td><span class="spec-Draft">Draft</span></td>
<td> </td>
</tr>
</tbody>
</table>
<h2 id="浏览器兼容性">浏览器兼容性</h2>
<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a class="external" href="https://github.com/mdn/browser-compat-data" rel="noopener">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
<p></p><div class="bc-data"><a class="bc-github-link external" href="https://github.com/mdn/browser-compat-data" rel="noopener">Update compatibility data on GitHub</a><table class="bc-table bc-table-js"><thead><tr class="bc-platforms"><td></td><th class="bc-platform-desktop" colspan="6"><span>Desktop</span></th><th class="bc-platform-mobile" colspan="7"><span>Mobile</span></th><th class="bc-platform-server" colspan="1"><span>Server</span></th></tr><tr class="bc-browsers"><td></td><th class="bc-browser-chrome"><span class="bc-head-txt-label bc-head-icon-chrome">Chrome</span></th><th class="bc-browser-edge"><span class="bc-head-txt-label bc-head-icon-edge">Edge</span></th><th class="bc-browser-firefox"><span class="bc-head-txt-label bc-head-icon-firefox">Firefox</span></th><th class="bc-browser-ie"><span class="bc-head-txt-label bc-head-icon-ie">Internet Explorer</span></th><th class="bc-browser-opera"><span class="bc-head-txt-label bc-head-icon-opera">Opera</span></th><th class="bc-browser-safari"><span class="bc-head-txt-label bc-head-icon-safari">Safari</span></th><th class="bc-browser-webview_android"><span class="bc-head-txt-label bc-head-icon-webview_android">Android webview</span></th><th class="bc-browser-chrome_android"><span class="bc-head-txt-label bc-head-icon-chrome_android">Chrome for Android</span></th><th class="bc-browser-edge_mobile"><span class="bc-head-txt-label bc-head-icon-edge_mobile">Edge Mobile</span></th><th class="bc-browser-firefox_android"><span class="bc-head-txt-label bc-head-icon-firefox_android">Firefox for Android</span></th><th class="bc-browser-opera_android"><span class="bc-head-txt-label bc-head-icon-opera_android">Opera for Android</span></th><th class="bc-browser-safari_ios"><span class="bc-head-txt-label bc-head-icon-safari_ios">Safari on iOS</span></th><th class="bc-browser-samsunginternet_android"><span class="bc-head-txt-label bc-head-icon-samsunginternet_android">Samsung Internet</span></th><th class="bc-browser-nodejs"><span class="bc-head-txt-label bc-head-icon-nodejs">Node.js</span></th></tr></thead><tbody><tr><th scope="row"><code>replace</code></th><td class="bc-supports-yes bc-browser-chrome"><span class="bc-browser-name">Chrome</span><abbr class="bc-level-yes only-icon" title="Full support">
<span>Full support</span>
</abbr>
Yes</td><td class="bc-supports-yes bc-browser-edge"><span class="bc-browser-name">Edge</span><abbr class="bc-level-yes only-icon" title="Full support">
<span>Full support</span>
</abbr>
12</td><td class="bc-supports-yes bc-browser-firefox"><span class="bc-browser-name">Firefox</span><abbr class="bc-level-yes only-icon" title="Full support">
<span>Full support</span>
</abbr>
1</td><td class="bc-supports-yes bc-browser-ie"><span class="bc-browser-name">IE</span><abbr class="bc-level-yes only-icon" title="Full support">
<span>Full support</span>
</abbr>
Yes</td><td class="bc-supports-yes bc-browser-opera"><span class="bc-browser-name">Opera</span><abbr class="bc-level-yes only-icon" title="Full support">
<span>Full support</span>
</abbr>
Yes</td><td class="bc-supports-yes bc-browser-safari"><span class="bc-browser-name">Safari</span><abbr class="bc-level-yes only-icon" title="Full support">
<span>Full support</span>
</abbr>
Yes</td><td class="bc-supports-yes bc-browser-webview_android"><span class="bc-browser-name">WebView Android</span><abbr class="bc-level-yes only-icon" title="Full support">
<span>Full support</span>
</abbr>
Yes</td><td class="bc-supports-yes bc-browser-chrome_android"><span class="bc-browser-name">Chrome Android</span><abbr class="bc-level-yes only-icon" title="Full support">
<span>Full support</span>
</abbr>
Yes</td><td class="bc-supports-yes bc-browser-edge_mobile"><span class="bc-browser-name">Edge Mobile</span><abbr class="bc-level-yes only-icon" title="Full support">
<span>Full support</span>
</abbr>
Yes</td><td class="bc-supports-yes bc-browser-firefox_android"><span class="bc-browser-name">Firefox Android</span><abbr class="bc-level-yes only-icon" title="Full support">
<span>Full support</span>
</abbr>
4</td><td class="bc-supports-yes bc-browser-opera_android"><span class="bc-browser-name">Opera Android</span><abbr class="bc-level-yes only-icon" title="Full support">
<span>Full support</span>
</abbr>
Yes</td><td class="bc-supports-yes bc-browser-safari_ios"><span class="bc-browser-name">Safari iOS</span><abbr class="bc-level-yes only-icon" title="Full support">
<span>Full support</span>
</abbr>
Yes</td><td class="bc-supports-yes bc-browser-samsunginternet_android"><span class="bc-browser-name">Samsung Internet Android</span><abbr class="bc-level-yes only-icon" title="Full support">
<span>Full support</span>
</abbr>
Yes</td><td class="bc-supports-yes bc-browser-nodejs"><span class="bc-browser-name">nodejs</span><abbr class="bc-level-yes only-icon" title="Full support">
<span>Full support</span>
</abbr>
Yes</td></tr><tr><th scope="row"><code>flags</code> <div class="bc-icons"><abbr class="only-icon" title="Deprecated. Not for use in new websites."><span>Deprecated</span><i class="ic-deprecated"></i></abbr><abbr class="only-icon" title="Non-standard. Expect poor cross-browser support."><span>Non-standard</span><i class="ic-non-standard"></i></abbr></div></th><td class="bc-supports-no bc-browser-chrome"><span class="bc-browser-name">Chrome</span><abbr class="bc-level-no only-icon" title="No support">
<span>No support</span>
</abbr>
No</td><td class="bc-supports-no bc-browser-edge"><span class="bc-browser-name">Edge</span><abbr class="bc-level-no only-icon" title="No support">
<span>No support</span>
</abbr>
No</td><td class="bc-supports-no bc-browser-firefox"><span class="bc-browser-name">Firefox</span><abbr class="bc-level-no only-icon" title="No support">
<span>No support</span>
</abbr>1 — 49</td><td class="bc-supports-no bc-browser-ie"><span class="bc-browser-name">IE</span><abbr class="bc-level-no only-icon" title="No support">
<span>No support</span>
</abbr>
No</td><td class="bc-supports-no bc-browser-opera"><span class="bc-browser-name">Opera</span><abbr class="bc-level-no only-icon" title="No support">
<span>No support</span>
</abbr>
No</td><td class="bc-supports-no bc-browser-safari"><span class="bc-browser-name">Safari</span><abbr class="bc-level-no only-icon" title="No support">
<span>No support</span>
</abbr>
No</td><td class="bc-supports-no bc-browser-webview_android"><span class="bc-browser-name">WebView Android</span><abbr class="bc-level-no only-icon" title="No support">
<span>No support</span>
</abbr>
No</td><td class="bc-supports-no bc-browser-chrome_android"><span class="bc-browser-name">Chrome Android</span><abbr class="bc-level-no only-icon" title="No support">
<span>No support</span>
</abbr>
No</td><td class="bc-supports-no bc-browser-edge_mobile"><span class="bc-browser-name">Edge Mobile</span><abbr class="bc-level-no only-icon" title="No support">
<span>No support</span>
</abbr>
No</td><td class="bc-supports-no bc-browser-firefox_android"><span class="bc-browser-name">Firefox Android</span><abbr class="bc-level-no only-icon" title="No support">
<span>No support</span>
</abbr>4 — 49</td><td class="bc-supports-no bc-browser-opera_android"><span class="bc-browser-name">Opera Android</span><abbr class="bc-level-no only-icon" title="No support">
<span>No support</span>
</abbr>
No</td><td class="bc-supports-no bc-browser-safari_ios"><span class="bc-browser-name">Safari iOS</span><abbr class="bc-level-no only-icon" title="No support">
<span>No support</span>
</abbr>
No</td><td class="bc-supports-no bc-browser-samsunginternet_android"><span class="bc-browser-name">Samsung Internet Android</span><abbr class="bc-level-no only-icon" title="No support">
<span>No support</span>
</abbr>
No</td><td class="bc-supports-no bc-browser-nodejs"><span class="bc-browser-name">nodejs</span><abbr class="bc-level-no only-icon" title="No support">
<span>No support</span>
</abbr>
No</td></tr></tbody></table><section class="bc-legend" id="sect1"><h3 class="offscreen" id="Legend">Legend</h3><dl><dt><span class="bc-supports-yes bc-supports">
<abbr class="bc-level bc-level-yes only-icon" title="Full support">
<span>Full support</span>
 
</abbr></span></dt><dd>Full support</dd><dt><span class="bc-supports-no bc-supports">
<abbr class="bc-level bc-level-no only-icon" title="No support">
<span>No support</span>
 
</abbr></span></dt><dd>No support</dd><dt><abbr class="only-icon" title="Non-standard. Expect poor cross-browser support."><span>Non-standard. Expect poor cross-browser support.</span><i class="ic-non-standard"></i></abbr></dt><dd>Non-standard. Expect poor cross-browser support.</dd><dt><abbr class="only-icon" title="Deprecated. Not for use in new websites."><span>Deprecated. Not for use in new websites.</span><i class="ic-deprecated"></i></abbr></dt><dd>Deprecated. Not for use in new websites.</dd></dl></section></div><p></p>
<h3 id="Firefox_备注">Firefox 备注</h3>
<ul>
<li><code>flags</code> 是一个仅在 Gecko 中可用的非标准的第三方参数:<code><var>str</var>.replace(<var>regexp</var>|<var>substr</var>, <var>newSubStr</var>|<var>function, flags</var>)</code></li>
<li>从 Gecko 27 (Firefox 27 / Thunderbird 27 / SeaMonkey 2.24) 开始这个方法就被整合到了ECMAScript规范中。当 replace() 被使用全局 g 标志的正则表达式调用时,<a href="Reference/Global_Objects/RegExp/lastIndex" title="lastIndex 是正则表达式的一个可读可写的整型属性用来指定下一次匹配的起始索引。"><code>RegExp.lastIndex</code></a> 属性将被重置为 0<a class="external" href="https://bugzilla.mozilla.org/show_bug.cgi?id=501739" rel="noopener" title="FIXED: String match and replace methods do not update global regexp lastIndex per ES3&amp;5">bug 501739</a>)。</li>
<li>从 Gecko 39 (Firefox 39 / Thunderbird 39 / SeaMonkey 2.36) 开始,<code>flags</code> 参数便被弃用,且在调用时会抛出一个控制台警告(<a class="external" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1142351" rel="noopener" title="FIXED: Add console warnings for non-standard flag argument of String.prototype.{search,match,replace}.">bug 1142351</a>)。</li>
<li>从 Gecko 47 (Firefox 47 / Thunderbird 47 / SeaMonkey 2.44) 开始,在非发行版本中已不再支持非标准的 <code>flags</code> 参数,并且不久后会完全移除该参数(<a class="external" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1245801" rel="noopener" title="FIXED: Disable non-standard flag argument of String.prototype.{search,match,replace} in non-release build.">bug 1245801</a>)。</li>
<li>从 Gecko 49 (Firefox 49 / Thunderbird 49 / SeaMonkey 2.46) 开始,不再支持非标准的 <code>flags</code> 参数(<a class="external" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1108382" rel="noopener" title="FIXED: Remove non-standard flag argument from String.prototype.{search,match,replace}">bug 1108382</a>)。</li>
</ul>
<h2 id="参见">参见</h2>
<ul>
<li><a href="Reference/Global_Objects/String/match" title="match() 方法检索返回一个字符串匹配正则表达式的的结果。"><code>String.prototype.match()</code></a></li>
<li><a href="Reference/Global_Objects/RegExp/exec" title="exec() 方法在一个指定字符串中执行一个搜索匹配。返回一个结果数组或 null。"><code>RegExp.prototype.exec()</code></a></li>
<li><a href="Reference/Global_Objects/RegExp/test" title="test() 方法执行一个检索,用来查看正则表达式与指定的字符串是否匹配。返回 true 或 false。"><code>RegExp.prototype.test()</code></a></li>
</ul>
</article>