语法高亮,滚动条美化,设置页面调整

This commit is contained in:
fofolee
2019-04-19 02:41:09 +08:00
parent 1e8f76c000
commit 359d29ee0b
1590 changed files with 12328 additions and 11441 deletions

View File

@@ -6,16 +6,16 @@
<h2 id="创建一个正则表达式">创建一个正则表达式</h2>
<p>你可以使用以下两种方法之一构建一个正则表达式:</p>
<p>使用一个正则表达式字面量,其由包含在斜杠之间的模式组成,如下所示:</p>
<pre class="brush: js">/*
<pre><code class="language-javascript">/*
/pattern/flags
*/
const regex = /ab+c/;
const regex = /^[a-zA-Z]+[0-9]*\W?_$/gi;</pre>
const regex = /^[a-zA-Z]+[0-9]*\W?_$/gi;</code></pre>
<p>在加载脚本后,正则表达式字面值提供正则表达式的编译。当正则表达式保持不变时,使用此方法可获得更好的性能。</p>
<p>或者调用<code><a href="/zh-CN/docs/JavaScript/Reference/Global_Objects/RegExp" title="zh-CN/docs/JavaScript/Reference/Global Objects/RegExp">RegExp</a></code>对象的构造函数,如下所示:</p>
<pre class="brush: js">/*
<pre><code class="language-javascript">/*
new RegExp(pattern [, flags])
*/
@@ -24,7 +24,7 @@ let regex = new RegExp("ab+c");
let regex = new RegExp(/^[a-zA-Z]+[0-9]*\W?_$/, "gi");
let regex = new RegExp("^[a-zA-Z]+[0-9]*\\W?_$", "gi");
</pre>
</code></pre>
<p>使用构造函数提供正则表达式的运行时编译。使用构造函数,当你知道正则表达式模式将会改变,或者你不知道模式,并从另一个来源,如用户输入。</p>
<h2 id="编写一个正则表达式的模式">编写一个正则表达式的模式</h2>
<p>一个正则表达式模式是由简单的字符所构成的,比如<code>/abc/</code>, 或者是简单和特殊字符的组合,比如 <code>/ab*c/</code> 或 <code>/Chapter (\d+)\.\d*/。后者</code>用到了括号,它在正则表达式中可以被用作是一个记忆设备。这一部分正则所匹配的字符将会被记住,在后面可以被利用。正如 <a href="#使用括号的子字符串匹配">使用括号的子字符串匹配</a></p>
@@ -294,7 +294,7 @@ let regex = new RegExp("^[a-zA-Z]+[0-9]*\\W?_$", "gi");
<pre>function escapeRegExp(string){
return string.replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$&amp;");
  //$&amp;表示整个被匹配的字符串
}</pre>
}</code></pre>
<h3 id="使用插入语">使用插入语</h3>
<p>任何正则表达式的插入语都会使这部分匹配的副字符串被记忆。一旦被记忆,这个副字符串就可以被调用于其它用途,如同 <a href="#使用括号的子字符串匹配">使用括号的子字符串匹配</a>之中所述。</p>
<p>比如, <code>/Chapter (\d+)\.\d*/</code> 解释了额外转义的和特殊的字符并说明了这部分pattern应该被记忆。它精确地匹配后面跟着一个以上数字字符的字符 'Chapter '  (<code>\d</code> 意为任何数字字符,<code>+ 意为1次以上</code>),跟着一个小数点(在这个字符中本身也是一个特殊字符;小数点前的 \ 意味着这个pattern必须寻找字面字符 '.')跟着任何数字字符0次以上。 (<code>\d</code> 意为数字字符, <code>*</code> 意为0次以上)。另外,插入语也用来记忆第一个匹配的数字字符。</p>
@@ -341,14 +341,14 @@ let regex = new RegExp("^[a-zA-Z]+[0-9]*\\W?_$", "gi");
<p>在接下来的例子中脚本将使用exec方法在一个字符串中查找一个匹配。</p>
<pre>var myRe = /d(b+)d/g;
var myArray = myRe.exec("cdbbdbsbz");
</pre>
</code></pre>
<p>如果你不需要访问正则表达式的属性这个脚本通过另一个方法来创建myArray</p>
<pre>var myArray = /d(b+)d/g.exec("cdbbdbsbz");
</pre>
</code></pre>
<p>如果你想通过一个字符串构建正则表达式,那么这个脚本还有另一种方法:</p>
<pre>var myRe = new RegExp("d(b+)d", "g");
var myArray = myRe.exec("cdbbdbsbz");
</pre>
</code></pre>
<p>通过这些脚本,匹配成功后将返回一个数组并且更新正则表达式的属性,如下表所示。</p>
<table class="fullwidth-table">
<caption>表 4.3 正则表达式执行返回信息</caption>
@@ -399,17 +399,17 @@ var myArray = myRe.exec("cdbbdbsbz");
<pre>var myRe = /d(b+)d/g;
var myArray = myRe.exec("cdbbdbsbz");
console.log("The value of lastIndex is " + myRe.lastIndex);
</pre>
</code></pre>
<p>这个脚本输出如下:</p>
<pre>The value of lastIndex is 5
</pre>
</code></pre>
<p>然而,如果你有如下脚本:</p>
<pre>var myArray = /d(b+)d/g.exec("cdbbdbsbz");
console.log("The value of lastIndex is " + /d(b+)d/g.lastIndex);
</pre>
</code></pre>
<p>它显示为:</p>
<pre>The value of lastIndex is 0
</pre>
</code></pre>
<p>当发生/d(b+)d/g使用两个不同状态的正则表达式对象lastIndex属性会得到不同的值。如果你需要访问一个正则表达式的属性则需要创建一个对象初始化生成器你应该首先把它赋值给一个变量。</p>
<h3 id="使用括号的子字符串匹配_2"><a id="使用括号的子字符串匹配" name="使用括号的子字符串匹配">使用括号的子字符串匹配</a></h3>
<p>一个正则表达式模式使用括号,将导致相应的子匹配被记住。例如,/a(b)c /可以匹配字符串“abc”并且记得“b”。回调这些括号中匹配的子串使用数组元素[1],……[n]。</p>
@@ -419,7 +419,7 @@ console.log("The value of lastIndex is " + /d(b+)d/g.lastIndex);
var str = "John Smith";
var newstr = str.replace(re, "$2, $1");
console.log(newstr);
</pre>
</code></pre>
<p>这个表达式输出 "Smith, John"。</p>
<h3 id="通过标志进行高级搜索">通过标志进行高级搜索</h3>
<p>正则表达式有四个可选参数进行全局和不分大小写搜索。这些参数既可以单独使用也可以一起使用在任何顺序和包含正则表达式的部分中。</p>
@@ -452,30 +452,30 @@ console.log(newstr);
</table>
<p>包含一个标志的正则表达式,使用这个表达式:</p>
<pre>var re = /pattern/flags;
</pre>
</code></pre>
<p>或者</p>
<pre>var re = new RegExp("pattern", "flags");
</pre>
</code></pre>
<p>值得注意的是,标志是一个正则表达式的一部分,它们在接下来的时间将不能添加或删除。</p>
<p>例如re = /\w+\s/g 将创建一个查找一个或多个字符后有一个空格的正则表达式,或者组合起来像此要求的字符串。</p>
<pre>var re = /\w+\s/g;
var str = "fee fi fo fum";
var myArray = str.match(re);
console.log(myArray);
</pre>
</code></pre>
<p>这段代码将输出 ["fee ", "fi ", "fo "]。在这个例子中,你可以将:</p>
<pre>var re = /\w+\s/g;
</pre>
</code></pre>
<p>替换成:</p>
<pre>var re = new RegExp("\\w+\\s", "g");
</pre>
</code></pre>
<p>并且能获取到相同的结果。</p>
<p>m标志用于指定多行输入字符串应该被视为多个行。如果使用m标志^和$匹配的开始或结束输入字符串中的每一行,而不是整个字符串的开始或结束。</p>
<h2 id="例子">例子</h2>
<p>以下例子说明了一些正则表达式的用途。</p>
<h3 id="改变输入字符串的顺序">改变输入字符串的顺序</h3>
<p>以下例子解释了正则表达式的构成和<code>string.split()</code> 以及 <code>string.replace()</code>的用途。它会整理一个只有粗略格式的含有全名名字首先出现的输入字符串这个字符串被空格、换行符和一个分号分隔。最终它会颠倒名字顺序姓氏首先出现和list的类型。</p>
<pre class="brush: js">// 下面这个姓名字符串包含了多个空格和制表符,
<pre><code class="language-javascript">// 下面这个姓名字符串包含了多个空格和制表符,
// 且在姓和名之间可能有多个空格和制表符。
var names = "Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ; Chris Hand ";
@@ -530,7 +530,7 @@ for (i = 0, len = bySurnameList.length; i &lt; len; i++){
output.push("---------- End");
console.log(output.join("\n"));
</pre>
</code></pre>
<h3 id="用特殊字符检验输入">用特殊字符检验输入</h3>
<p>在以下例子中我们期望用户输入一个电话号码。当用户点击“Check”按钮我们的脚本开始检查这些数字是否合法。如果数字合法匹配正则表达式所规定的字符序列脚本显示一条感谢用户的信息并确认该数字。如果这串数字不合法脚本提示用户电话号码不合法。.</p>
<p>包含非捕获括号 <code>(?:</code> 这个正则表达式寻找三个数字字符<code>\d{3}</code> 或者 <code>|</code> 一个左半括号<code>\(</code>跟着三位数字<code>\d{3}</code>, 跟着一个封闭括号 <code>\)</code>, (结束非捕获括号 <code>)</code>) 后跟着一个短破折号或左斜杠或小数点,随后跟随三个数字字符,当记忆字符 <code>([-\/\.])捕获并记住,后面跟着三位小数</code> <code>\d{3},再后面跟随记住的左斜杠、右斜杠或小数点</code> <code>\1最后跟着四位小数</code> <code>\d{4}。</code></p>
@@ -558,7 +558,7 @@ console.log(output.join("\n"));
&lt;input id="phone"&gt;&lt;button onclick="testInfo(document.getElementById('phone'));"&gt;Check&lt;/button&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
&lt;/html&gt;</code></pre>
<p></p><div class="prevnext" style="text-align: right;">
<p><a href="Guide/Text_formatting" style="float: left;">« 上一页</a><a href="Guide/Indexed_collections">下一页 »</a></p>
</div><p></p>