aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/javascript/reference/global_objects/regexp/sticky/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'files/zh-cn/web/javascript/reference/global_objects/regexp/sticky/index.html')
-rw-r--r--files/zh-cn/web/javascript/reference/global_objects/regexp/sticky/index.html86
1 files changed, 86 insertions, 0 deletions
diff --git a/files/zh-cn/web/javascript/reference/global_objects/regexp/sticky/index.html b/files/zh-cn/web/javascript/reference/global_objects/regexp/sticky/index.html
new file mode 100644
index 0000000000..f74b96499b
--- /dev/null
+++ b/files/zh-cn/web/javascript/reference/global_objects/regexp/sticky/index.html
@@ -0,0 +1,86 @@
+---
+title: RegExp.prototype.sticky
+slug: Web/JavaScript/Reference/Global_Objects/RegExp/sticky
+tags:
+ - JavaScript
+ - RegExp
+ - 正则表达式
+translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/sticky
+---
+<div>{{JSRef}}</div>
+
+<p><strong><code>sticky</code></strong> 属性反映了搜索是否具有粘性( 仅从正则表达式的 {{jsxref("RegExp.lastIndex", "lastIndex")}} 属性表示的索引处搜索 )。<code>sticky</code> 是正则表达式对象的只读属性。</p>
+
+<p>{{EmbedInteractiveExample("pages/js/regexp-prototype-sticky.html", "taller")}}</p>
+
+<div>{{js_property_attributes(0, 0, 1)}}</div>
+
+<h2 id="描述">描述</h2>
+
+<p><code>sticky</code> 的值是 {{jsxref("Boolean")}} ,并在 <code>y</code> 标志使用时为真; 否则为假。<code>y</code> 标志指示,仅从正则表达式的 {{jsxref("RegExp.lastIndex", "lastIndex")}} 属性表示的索引处为目标字符串匹配(并且不会尝试从后续索引匹配)。如果一个表达式同时指定了 <code>sticky</code> 和 <code>global</code>,其将会忽略 <code>global</code> 标志。</p>
+
+<p>你不能直接更改这个属性,它是只读的。</p>
+
+<h2 id="例子">例子</h2>
+
+<h3 id="使用带_sticky_标志的正则表达式">使用带 sticky 标志的正则表达式</h3>
+
+<pre class="brush: js">var str = '#foo#';
+var regex = /foo/y;
+
+regex.lastIndex = 1;
+regex.test(str); // true (译注:此例仅当 lastIndex = 1 时匹配成功,这就是 sticky 的作用)
+regex.lastIndex = 5;
+regex.test(str); // false (lastIndex 被 sticky 标志考虑到,从而导致匹配失败)
+regex.lastIndex; // 0 (匹配失败后重置)
+</pre>
+
+<h3 id="锚定的_sticky_标志">锚定的 sticky 标志</h3>
+
+<p>火狐的 SpiderMonkey 引擎的几个版本有一个 <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=773687">bug</a>,处理 <code>^</code> 断言和 sticky 标志时,会允许使用了 sticky 标志的表达式从 <code>^</code> 断言开始匹配,这是不对的。这个 bug 是在 Firefox 3.6 之后的某个版本引入的(which had the sticky flag but not the bug)并于2015年修复。 可能正因为这个 bug, ES2015 规范 <a href="http://www.ecma-international.org/ecma-262/7.0/index.html#sec-assertion">特别指出</a>:</p>
+
+<blockquote>
+<p>当使用带有 <code>y</code> 标识的匹配模式时,^ 断言总是会匹配输入的开始位置或者(如果是多行模式)每一行的开始位置。</p>
+</blockquote>
+
+<p>正确行为的示例:</p>
+
+<pre class="brush: js">var regex = /^foo/y;
+regex.lastIndex = 2;
+regex.test("..foo"); // false - 索引2不是字符串的开始
+
+var regex2 = /^foo/my;
+regex2.lastIndex = 2;
+regex2.test("..foo"); // false - 索引2不是字符串或行的开始
+regex2.lastIndex = 2;
+regex2.test(".\nfoo"); // true - 索引2是行的开始
+</pre>
+
+<h2 id="规范">规范</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-get-regexp.prototype.sticky', 'RegExp.prototype.sticky')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="浏览器兼容性">浏览器兼容性</h2>
+
+<p>{{Compat("javascript.builtins.RegExp.sticky")}}</p>
+
+<div></div>
+
+<h2 id="相关链接"><span style="">相关链接</span></h2>
+
+<ul>
+ <li>{{jsxref("RegExp.lastIndex")}}</li>
+ <li>{{jsxref("RegExp.prototype.global")}}</li>
+ <li>{{jsxref("RegExp.prototype.ignoreCase")}}</li>
+ <li>{{jsxref("RegExp.prototype.multiline")}}</li>
+ <li>{{jsxref("RegExp.prototype.source")}}</li>
+</ul>