国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JS正則表達式之非捕獲分組用法實例分析

2019-11-19 18:13:56
字體:
來源:轉載
供稿:網友

本文實例講述了JS正則表達式非捕獲分組用法。分享給大家供大家參考,具體如下:

最近在看JsonSQL的時候,通過源碼中的一段正則表達式,了解到了什么是非捕獲分組以及它的使用場景。在js中,正常的捕獲分組格式是(XX),非捕獲分組格式為(?:XX)。我們先從正則表達式數量詞說起,如果我們要求字符b至少出現一次,可以使用正則/b+/;如果要求ab至少出現一次,那么必需使用/(ab)+/,不能用/ab+/。也就是說,如果想對多個字符使用數量詞,必需要用圓括號。

var str = "a1***ab1cd2***c2";var reg1 = /((ab)+/d+)((cd)+/d+)/i;var reg2 = /((?:ab)+/d+)((?:cd)+/d+)/i;alert(str.match(reg1));//ab1cd2,ab1,ab,cd2,cdalert(str.match(reg2));//ab1cd2,ab1,cd2

可以看出捕獲分組和非捕獲分組的區別了吧:非捕獲分組,只是用來匹配,并不會提取分組內容。也就是說,如果我們只想用圓括號將一些字符用數量詞修飾,并不需要這個分組的內容,這就是非捕獲分組。

下面這段代碼用來提取sql語句中的各個子片段,大量使用了非捕獲分組,可以細細品味下。

var returnfields = sql.match(/^/s*SELECT/s+((?:[0-9A-Za-z_]+/s*,/s*)+[0-9A-Za-z_]+ |/*|[0-9A-Za-z_]+)/s+FROM/s+([a-z0-9A-Z_]+)(?: where/s+(.+))?(?:/s+order/s+by/s+([a-z0-9_A-Z]+)(?:/s+(asc|desc|ascnum|descnum)?))?(?:/s+limit/s+(/d+,/d+))?/i);var ops = {  fields: returnfields[1].replace('/s','').split(','),  from: returnfields[2].replace('/s',''),  where: (returnfields[3] == undefined)? "true":returnfields[3],  orderby: (returnfields[4] == undefined)? []:returnfields[4].replace('/s','').split(','),  order: (returnfields[5] == undefined)? "asc":returnfields[5],  limit: (returnfields[6] == undefined)? []:returnfields[6].replace('/s','').split(',')};

關于這段正則有幾個地方解釋下:

1.字段名和表明只能由大小寫字母、數字和下劃線組成。

2.where后面的條件必須放在()中,否則不能匹配。這個和真正的SQL是不同的。

3.select后面的字段有3種格式:單個字段、多個字段(以逗號分隔)、所有字段(用*表示)。

4.where子語句、order by子語句、limit子語句都是可選的。

如下面這段文本,能夠匹配上面的正則:

select age from data where (name=='aty')

PS:這里再為大家提供2款非常方便的正則表達式工具供大家參考使用:

JavaScript正則表達式在線測試工具:
http://tools.VeVB.COm/regex/javascript

正則表達式在線生成工具:
http://tools.VeVB.COm/regex/create_reg

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《JavaScript正則表達式技巧大全》、《JavaScript替換操作技巧總結》、《JavaScript查找算法技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》、《JavaScript中json操作技巧總結》、《JavaScript錯誤與調試技巧總結》及《JavaScript數學運算用法總結

希望本文所述對大家JavaScript程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 石河子市| 黄陵县| 东乡| 临猗县| 忻城县| 衡山县| 天水市| 朔州市| 宜阳县| 大新县| 佛冈县| 阿尔山市| 虎林市| 随州市| 顺平县| 安宁市| 城市| 武穴市| 绿春县| 周口市| 洞头县| 靖西县| 沽源县| 右玉县| 栾川县| 高陵县| 浠水县| 迁西县| 喀喇沁旗| 巴林右旗| 栾川县| 盐山县| 灌南县| 垦利县| 益阳市| 屏边| 洪雅县| 宝兴县| 合作市| 闸北区| 太康县|