整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          Javascript正則表達式示例之HTML標簽及H

          Javascript正則表達式示例之HTML標簽及HTML語法樹

          一節(jié)聊到正則表達式的簡單應(yīng)用,不足之處歡迎留言交流。

          Javascript正則表達式示例之基本概念

          今天,我們來看一下,如何使用正則表達式,匹配HTML標簽及相關(guān)信息。

          為什么要加上相關(guān)信息呢?

          因為,如果您想寫一個HTML語法樹解析庫的時候,可能會用到。


          下面內(nèi)容用到的語法

          |:表示或者,要么前面,要么后面

          (?<=我前面出現(xiàn)的內(nèi)容)要匹配的內(nèi)容:只匹配前面出現(xiàn)的字符之后的內(nèi)容。

          可視圖

          要匹配的內(nèi)容(?=我前面出現(xiàn)的內(nèi)容):只匹配后面出現(xiàn)的字符之前的內(nèi)容。

          可視圖

          分組捕獲:一對完整的小括號(),表示一個組。

          \數(shù)字:你要使用那一個分組捕獲到的內(nèi)容。

          .*?:在正則表達式中,. 表示匹配任意字符,* 表示匹配 0 到任意次的前一個字符,? 表示非貪婪匹配,即盡可能匹配最少的字符。因此,.*? 表示匹配任意字符零次或多次,但盡可能匹配最少的字符。這個表達式通常用于匹配一個字符串中的所有內(nèi)容,但是避免貪婪匹配導(dǎo)致的匹配錯誤。

          ^: 表示匹配開始

          [要匹配的字符]:只匹配括號中的字符。

          比如[0-9]、[a-z]、[A-Z]、[0-9a-zA-Z]、[0-9abc]等等。

          [^要匹配的字符]:[]中加^表示匹配不是“要匹配的字符”。


          1、匹配所有HTML標簽,并清空。實現(xiàn)innerText類似的功能。

          <body><div id="left">left</div><div id="right">right</div></body>
          const text=document.body.innerText;
          text=text.replace(/\n/g, '');
          console.log(text);
          //輸出: leftright

          假設(shè)沒有innerText的功能呢?實現(xiàn)這個功能,使用正則表達式無疑是最方便的。

          var text=document.body.innerHTML.replace(/<[^>]+>/g,'');
          text=text.replace(/\n/g, '');
          console.log(text);
          //輸出: leftright

          匹配結(jié)果

          可視圖


          是的,這個正則表達式的意思是,查找<>并且包含他們之間不為>的一段字符串。

          到這里,您以為就結(jié)束了嗎?您在網(wǎng)上搜索匹配HTML標簽,可能也會得到這么一個結(jié)果(例如:<[^>]+>、<.*?>、等等),但實際上這只是開始,我們本著只要是程序就可能有bug的原則,所以我們來看下面一個例子。

          const strHtml='<span data-code=">">>是大于符號。</span>';
          const strRes=strHtml.replace(/<[^>]+>/g, '');
          console.log(strRes);
          // ">>是大于符號。

          [可憐]bug出現(xiàn)了,怎么辦?別著急,請看下一個知識點。


          2、匹配HTML標簽屬性,是寫一個HTML語法樹要經(jīng)歷的事情。


          2.1、首先,我們先解決第一點最后的bug。

          const strHtml='<span data-code=">">>是大于符號。</span>';
          // 一個小改動即可。
          const strRes=strHtml.replace(/<("[^"]*"|[^>])+>/g, '');
          console.log(strRes);
          // >是大于符號。

          可視圖

          完美[打臉] ,還沒結(jié)束……

          const strHtml="<span data-code='>'>>是大于符號。</span>";
          const strRes=strHtml.replace(/<("[^"]*"|[^>])+>/g, '');
          console.log(strRes);
          // '>>是大于符號。

          甲:這不是我寫的HTML不標準,是你的解析庫兼容性不好,瀏覽器都可以識別,你為什么不可以?

          已:……。

          const strHtml=`<i code="<"><小于符號。</i><i code='>'>>大于符號。</i>`;
          // 繼續(xù)改造
          const strRes=strHtml.replace(/<((["'])+.*?\2|[^>])+>/g, '');
          console.log(strRes);
          // <小于符號。>大于符號。

          匹配結(jié)果

          可視圖

          是的,利用正則表達式分組捕獲的語法,實現(xiàn)了上面的需求。


          2.2 現(xiàn)在,我們來看看,如何找到某個標簽的所有屬性。

          const strHtml=`
          <input type='text' disabled value="" class="txt txt-md" v-on:click="save('button')" />
          `;

          上面的例子中,有多種情況,我們首先來整理出來。

          屬性1:type='text'

          /[\w]+=(["'])+.*?/

          屬性2:disabled

          /[\w]+/

          屬性3:value=""

          /[\w]+=(["'])+.*?/

          屬性4:class="txt txt-md"

          /[\w]+=(["'])+.*?/

          屬性5:v-on:click="save('button')"

          /[\w:]+=(["'])+.*?/

          其他情況:歡迎討論。

          把所有情況連起來之后。

          const strHtml=`<input type='text' disabled value="" class="txt txt-md" v-on:click="save('button')" />`;
          const tagAttrs=strHtml.match(/(?<=\s)[\w:-]+(=(["']).*?\2)*/g) || [];
          console.log(tagAttrs);
          //  ["type='text'", 'disabled', 'value=""', 'class="txt txt-md"', `v-on:click="save('button')"`]

          匹配結(jié)果

          可視圖

          人人為我,我為人人,歡迎您的瀏覽,我們一起加油吧。

          1題. 編寫一個Filter,需要()

          A. 繼承Filter 類

          B. 實現(xiàn)Filter 接口

          C. 繼承HttpFilter 類

          D. 實現(xiàn)HttpFilter接口

          正確答案為:B


          第2題. 自定義標簽的配置文件放在________

          A. WebRoot

          B. lib

          C. classes

          D. WEB-INF

          正確答案為:D


          第3題. 有關(guān)會話跟蹤技術(shù)描述正確的是(多選)

          A. Cookie是Web服務(wù)器發(fā)送給客戶端的一小段信息,客戶端請求時,可以讀取該信息發(fā)送到服務(wù)器端

          B. 關(guān)閉瀏覽器意味著會話ID丟失,但所有與原會話關(guān)聯(lián)的會話數(shù)據(jù)仍保留在服務(wù)器上,直至?xí)掃^期

          C. 在禁用Cookie時可以使用URL重寫技術(shù)跟蹤會話

          D. 隱藏表單域?qū)⒆侄翁砑拥紿TML表單并在客戶端瀏覽器中顯示

          正確答案為:ABC


          第4題. 在J2EE中,重定向到另一個頁面,以下()語句是正確的

          A. request . sendRedirect(“http :// www . svse . com . cn”);

          B. request . sendRedirect();

          C. response . sendRedirect(“http: // www . svse . com . cn”);

          D. response .sendRedirect();

          正確答案為:C


          第5題. EL表達式,${10 mod3},執(zhí)行結(jié)果為:

          A. 10 mod 3

          B. 1

          C. 3

          D. null

          正確答案為:B


          第6題. 自定義標簽的作用是

          A. 編寫和使用方便

          B. 規(guī)定是這樣的,如果不用,別人會說我們不專業(yè)

          C. 可以減少jsp中的java代碼,將代碼與界面標簽分離,簡化前臺開發(fā)

          D. 連數(shù)據(jù)庫

          正確答案為:C


          第7題. request.getRequestDispatcher().forward(request,response)稱之為

          A. 流轉(zhuǎn)

          B. 轉(zhuǎn)發(fā)

          C. 重定向

          D. 導(dǎo)航

          正確答案為:B


          第8題. 有關(guān)Servlet的生命周期說法正確的有 (多選)

          A. Servlet的生命周期由Servlet實例控制

          B. init()方法在創(chuàng)建完Servlet實例后對其進行初始化,傳遞的參數(shù)為實現(xiàn)ServletContext接口的對象

          C. service()方法響應(yīng)客戶端發(fā)出的請求

          D. destroy()方法釋放Servlet實例

          正確答案為:BCD


          第9題. 在J2EE中,給定某Servlet的代碼如下,編譯運行該文件,以下陳述正確的是()。(選擇一項)

          Public class Servlet1 extends HttpServlet{

          Publicvoid init() throws ServletException{

          }

          Publicvoid service(HttpServletRequest request,HttpServletResponse response)

          ThrowsServletException,IOException{

          PrintWriterout=response.getWriter();

          out.println(“hello!”);

          }

          }

          A. 編譯該文件時會提示缺少doGet()或者dopost()方法,編譯不能夠成功通過

          B. 編譯后,把Servlet1.class放在正確位置,運行該Servlet,在瀏覽器中會看到輸出文字:hello!

          C. 編譯后,把Servlet1.class放在正確位置,運行該Servlet,在瀏覽器中看不到任何輸出的文字

          D. 編譯后,把Servlet1.class放在正確位置,運行該Servlet,在瀏覽器中會看到運行期錯誤信息

          正確答案為:B


          第10題. 在Servlet中,response.getWriter()返回的是____________

          A. JspWriter對象

          B. PrintWriter對象

          C. Out對象

          D. ResponseWriter對象

          正確答案為:B


          第11題. 在web.xml中使用___________標簽配置過濾器

          A. <filter>和<filter-mapping>

          B. <filter-name>和<filter-class>

          C. <filter>和<filter-class>

          D. <filter-pattern>和<filter>

          正確答案為:A


          第12題. 自定義標簽的描述文件在web.xml中配置正確的

          A. <taglib>

          <tag-uri>bob-tld</tag-uri>

          <tag-location>/WEB-INF/bob.tld</tag-location>

          </taglib>

          B. <tag>

          <taglib-uri>bob-tld</taglib-uri>

          <taglib-location>/WEB-INF/bob.tld</taglib-location>

          </tag>

          C. <jsp-taglib>

          <taglib-uri>bob-tld</taglib-uri>

          <taglib-location>/WEB-INF/bob.tld</taglib-location>

          </jsp-taglib>

          D. <jsp-config>

          <taglib>

          <taglib-uri>bob-tld</taglib-uri>

          <taglib-location>/WEB-INF/bob.tld</taglib-location>

          </taglib>

          </jsp-config>

          正確答案為:D


          第13題. J2EE中,Servlet API為使用Cookie,提供了()類。

          A. javax.servlet.http.Cookie

          B. javax.servlet.http.HttpCookie

          C. javax.servlet. Cookie

          D. javax.servlet.http.HttpCookie

          正確答案為:A

          碼: Lib/html/__init__.py

          該模塊定義了操作HTML的工具。

          • html.escape(s, quote=True)

          將字符串 s 中的字符``&`` 、 < 和 > 轉(zhuǎn)換為安全的HTML序列。 如果需要在 HTML 中顯示可能包含此類字符的文本,請使用此選項。 如果可選的標志 quote 為真值,則字符 (") 和 (') 也被轉(zhuǎn)換;這有助于包含在由引號分隔的 HTML 屬性中,如 <a href="...">。

          • html.unescape(s)

          將字符串 s 中的所有命名和數(shù)字字符引用 (例如 >, >, >) 轉(zhuǎn)換為相應(yīng)的Unicode字符。 此函數(shù)使用HTML 5標準為有效和無效字符引用定義的規(guī)則,以及 HTML 5 命名字符引用列表。

          html 包中的子模塊是:

          html.parser —— 具有寬松解析模式的HTML / XHTML解析器

          html.entities – HTML 實體定義


          源代碼: Lib/html/parser.py


          這個模塊定義了一個 HTMLParser 類,為 HTML(超文本標記語言)和 XHTML 文本文件解析提供基礎(chǔ)。


          class html.parser.HTMLParser(*, convert_charrefs=True)

          創(chuàng)建一個能解析無效標記的解析器實例。


          如果 convert_charrefs 為 True (默認值),則所有字符引用( script/style 元素中的除外)都會自動轉(zhuǎn)換為相應(yīng)的 Unicode 字符。


          一個 HTMLParser 類的實例用來接受 HTML 數(shù)據(jù),并在標記開始、標記結(jié)束、文本、注釋和其他元素標記出現(xiàn)的時候調(diào)用對應(yīng)的方法。要實現(xiàn)具體的行為,請使用 HTMLParser 的子類并重載其方法。


          這個解析器不檢查結(jié)束標記是否與開始標記匹配,也不會因外層元素完畢而隱式關(guān)閉了的元素引發(fā)結(jié)束標記處理。

          HTMLParser 實例有下列方法:


          • HTMLParser.feed(data)

          填充一些文本到解析器中。如果包含完整的元素,則被處理;如果數(shù)據(jù)不完整,將被緩沖直到更多的數(shù)據(jù)被填充,或者 close() 被調(diào)用。data 必須為 str 類型。


          • HTMLParser.close()

          如同后面跟著一個文件結(jié)束標記一樣,強制處理所有緩沖數(shù)據(jù)。這個方法能被派生類重新定義,用于在輸入的末尾定義附加處理,但是重定義的版本應(yīng)當(dāng)始終調(diào)用基類 HTMLParser 的 close() 方法。


          • HTMLParser.reset()

          重置實例。丟失所有未處理的數(shù)據(jù)。在實例化階段被隱式調(diào)用。


          • HTMLParser.getpos()

          返回當(dāng)前行號和偏移值。


          • HTMLParser.get_starttag_text()

          返回最近打開的開始標記中的文本。 結(jié)構(gòu)化處理時通常應(yīng)該不需要這個,但在處理“已部署”的 HTML 或是在以最小改變來重新生成輸入時可能會有用處(例如可以保留屬性間的空格等)。


          下列方法將在遇到數(shù)據(jù)或者標記元素的時候被調(diào)用。他們需要在子類中重載。基類的實現(xiàn)中沒有任何實際操作(除了 handle_startendtag() ):


          • HTMLParser.handle_starttag(tag, attrs)

          這個方法在標簽開始的時候被調(diào)用(例如: <div id="main"> )。


          tag 參數(shù)是小寫的標記名。attrs 參數(shù)是一個 (name, value) 形式的列表,包含了所有在標記的 <> 括號中找到的屬性。name 轉(zhuǎn)換為小寫,value 的引號被去除,字符和實體引用都會被替換。


          實例中,對于標簽 <A HREF="https://www.cwi.nl/">,這個方法將以下列形式被調(diào)用 handle_starttag('a', [('href', 'https://www.cwi.nl/')]) 。


          html.entities 中的所有實體引用,會被替換為屬性值。


          • HTMLParser.handle_endtag(tag)

          此方法被用來處理元素的結(jié)束標記(例如: </div> )。


          tag 參數(shù)是小寫的標簽名。


          • HTMLParser.handle_startendtag(tag, attrs)

          類似于 handle_starttag(), 只是在解析器遇到 XHTML 樣式的空標記時被調(diào)用( <img ... />)。這個方法能被需要這種特殊詞法信息的子類重載;默認實現(xiàn)僅簡單調(diào)用 handle_starttag() 和 handle_endtag() 。


          • HTMLParser.handle_data(data)

          這個方法被用來處理任意數(shù)據(jù)(例如:文本節(jié)點和 <script>...</script> 以及 <style>...</style> 中的內(nèi)容)。


          • HTMLParser.handle_entityref(name)

          這個方法被用于處理 &name; 形式的命名字符引用(例如 >),其中 name 是通用的實體引用(例如: 'gt')。如果 convert_charrefs 為 True,該方法永遠不會被調(diào)用。


          • HTMLParser.handle_charref(name)

          這個方法被用來處理 &#NNN; 和 &#xNNN; 形式的十進制和十六進制字符引用。例如,> 等效的十進制形式為 > ,而十六進制形式為 > ;在這種情況下,方法將收到 '62' 或 'x3E' 。如果 convert_charrefs 為 True ,則該方法永遠不會被調(diào)用。


          • HTMLParser.handle_comment(data)

          這個方法在遇到注釋的時候被調(diào)用(例如: <!--comment--> )。


          例如, <!-- comment --> 這個注釋會用 ' comment ' 作為參數(shù)調(diào)用此方法。


          Internet Explorer 條件注釋(condcoms)的內(nèi)容也被發(fā)送到這個方法,因此,對于 <!--[if IE 9]>IE9-specific content<![endif]--> ,這個方法將接收到 '[if IE 9]>IE9-specific content<![endif]' 。


          • HTMLParser.handle_decl(decl)

          這個方法用來處理 HTML doctype 申明(例如 <!DOCTYPE html> )。


          decl 形參為 <!...> 標記中的所有內(nèi)容(例如: 'DOCTYPE html' )。


          • HTMLParser.handle_pi(data)

          此方法在遇到處理指令的時候被調(diào)用。data 形參將包含整個處理指令。例如,對于處理指令 <?proc color='red'> ,這個方法將以 handle_pi("proc color='red'") 形式被調(diào)用。它旨在被派生類重載;基類實現(xiàn)中無任何實際操作。


          注解 HTMLParser 類使用 SGML 語法規(guī)則處理指令。使用 '?' 結(jié)尾的 XHTML 處理指令將導(dǎo)致 '?' 包含在 data 中。


          • HTMLParser.unknown_decl(data)

          當(dāng)解析器讀到無法識別的聲明時,此方法被調(diào)用。


          data 形參為 <![...]> 標記中的所有內(nèi)容。某些時候?qū)ε缮惖闹剌d很有用。基類實現(xiàn)中無任何實際操作。

          源碼: Lib/html/entities.py

          該模塊定義了四個詞典, html5、 name2codepoint、 codepoint2name、以及 entitydefs。


          • html.entities.html5

          將 HTML5 命名字符引用 1 映射到等效的 Unicode 字符的字典,例如 html5['gt;']=='>'。 請注意,尾隨的分號包含在名稱中(例如 'gt;'),但是即使沒有分號,一些名稱也會被標準接受,在這種情況下,名稱出現(xiàn)時帶有和不帶有 ';'。另見 html.unescape()。


          • html.entities.entitydefs

          將 XHTML 1.0 實體定義映射到 ISO Latin-1 中的替換文本的字典。


          • html.entities.name2codepoint

          將 HTML 實體名稱映射到 Unicode 代碼點的字典。


          • html.entities.codepoint2name

          將 Unicode 代碼點映射到 HTML 實體名稱的字典。


          主站蜘蛛池模板: 无码国产伦一区二区三区视频| 国模极品一区二区三区| 中文字幕在线无码一区二区三区| 久久精品午夜一区二区福利| 亚洲AV美女一区二区三区 | 国产免费一区二区三区免费视频| 秋霞日韩一区二区三区在线观看 | 天堂成人一区二区三区| 国产亚洲综合精品一区二区三区| 精品国产免费一区二区| 国产亚洲一区二区精品| 国产色精品vr一区区三区 | 三上悠亚国产精品一区| 亚洲一区二区三区高清不卡 | 另类ts人妖一区二区三区| 日本免费一区二区三区最新 | 日本成人一区二区三区| 波多野结衣中文一区| 麻豆国产一区二区在线观看| 久久AAAA片一区二区| 亚洲乱码av中文一区二区| 无码国产精品一区二区免费vr| 无码av免费毛片一区二区 | 久久se精品一区二区| 国产免费av一区二区三区| 国产成人无码一区二区三区| 波多野结衣中文一区| 五十路熟女人妻一区二区| 国产激情无码一区二区app| 亲子乱AV视频一区二区| 久久久不卡国产精品一区二区| 性盈盈影院免费视频观看在线一区| 无码国产精品一区二区免费式芒果| 国模无码人体一区二区| 国产日韩高清一区二区三区| 中文字幕永久一区二区三区在线观看| 日韩av片无码一区二区三区不卡| 日韩精品一区二区三区国语自制| 三级韩国一区久久二区综合| 日韩综合无码一区二区| 亚洲丰满熟女一区二区v|