javascript正則表達式

首先,sublime關於正則表達式的用法:
開啓sublime正則匹配:ctrl+f 點擊圖標'.*',若是須要替換 ctrl+h
利用正則表達式匹配以下字符串,我須要匹配jpg,而且以http開頭的url,而且取出http後面的內容:javascript

http://img.host.com/folfdsders/sf.jpg
https://img.host.com/fofdslders/fdssf.jpng
http://imgs.host.com/folders/fdssf.jpg
https://img.host.com/ffdsolders/fdssf.jpg
https://imgs.host.com/folders/sfdsf.jpng
http://img.host.com/fofdslders/sffds.jpg
http://img.host.com/fofdslders/sffds.jpg
http://img.host.com/folders/sf.jpg
https://img.host.com/folders/sf.jpg

分析:html

http:(\/\/.+\.jpg)
1,首先以http://開頭的,可是 '//'須要轉意爲'\/\/'.
2,. 表明任意字符。
3,+ 表明至少有1一個字符
4,後面又是任意字符,可是重複使用了,這裏使用'\'來轉意爲 \.
5,以.jpg結尾的圖片
6,() 表明分組,我須要的是括號裏面的內容

最後的替換結果爲:
圖片描述java

匹配日期類型:
將如下日期類型匹配的找出來正則表達式

2016-02-06
2006-01-06
20w6-01-06
2026-d2-06
2008-02-16
2fd6-01-df
2000-11-16
2032315-02-23

答案:sql

^\d{4}[/-]\d{2}[/-]\d{2}$

1,d表明一個數字,d{4}表明4個數字
2,[]表示'或',[/-] 表明 中級的鏈接符 '/'或者是'-'
3,^ 表明開頭
4,$ 表明結尾
以下圖所示:
圖片描述數組

如今我想把找出來的內容替換成另一種日期格式的 dd/MM/yyyy
答案:函數

^(\d{4})[/-](\d{2})[/-](\d{2})$

以下圖所示:
圖片描述測試

Java裏面有時也須要判斷日期的格式(yyyy-MM-dd)
好比:ui

if (!value.matches
       ("^[1-2]{1}[0-9]{3}\\-[0-1]{1}[0-9]{1}\\-[0-3]{1}[0-9]{1}$")) 
       {
                    throw new  RuntimeException("日期格式不正確");
       }

能夠根據日期的格式須要,任意的更改。this

Javascript 中的正則表達式
1,字面量
這裏b表明單詞的邊界,g表明global全局的
以下圖所示:
圖片描述
2,可使用構造函數的方式來new一個正則表達式:
圖片描述
3,修飾符(i 表明ignore,忽略大小寫)
下面這個demo 但加上了i是'Do'也會被當作'do'來替換掉.
圖片描述
正則表達式的類型
1,字符類 [abc],若是字符過多能夠寫成[a-z],若是須要大小寫字母徹底匹配 [a-zA-Z]
圖片描述
若是我想匹配數子和中劃線
2015-12-15'.replace(/[0-9-]/g,'W')
"WWWWWWWWWW"
2,字符類取反^
1
3,預約義字符
圖片描述
邊界匹配字符
圖片描述
4,多行匹配
m
5,正則表達式中的量詞
圖片描述
6,貪婪模式-儘量多的匹配
圖片描述
非貪婪模式-儘量少的匹配
圖片描述
7,分組
主要用來圈定指定內容進行分組處理,好比:
我須要取出小寫字母加上數字連續出現3次的字符(須要用小括號將指定分組的字符括起來)
圖片描述
8.利用分組反向引用 我但願把日期 2016-02-05 轉換成 02/05/2016
圖片描述
9,前瞻
正則表達式從文本的頭部向尾部開始解析,文本尾部方向,稱爲'前',前瞻是在正則表達式匹配規則的時候,向前檢查是否符合斷言,後顧/後瞻方向相反(javascript不支持後顧)
a3*4 匹配有帶數字的單詞字符。w = [a-zA-Z0-9]
圖片描述
如上圖所示,只有單詞字符參與匹配替換,後面的數子只作匹配規則使用,不參與匹配替換。
正則表達式的對象屬性
圖片描述
具體例子
圖片描述
RegExp.prototype.test(str)
用於測試字符串參數中是否存在匹配正則表達式模式的字符串,若是存在返回true,不然返回false
因爲正則表達式有一個lastIndex,因此出現執行test方法 有時時true 有時是false
圖片描述
Stringl.protatype.search(reg)
search() 方法用於檢索字符串中指定的字符串,或檢索與正則表達式相匹配的字符串
方法返回第一個匹配的結果 index,查找不到返回 -1
search()方法不執行全局匹配,它忽略標誌g,而且老是從字符串的開始進行搜索。
圖片描述
String.prototype.match(reg)
若是 regexp沒有標誌g,那麼match()方法就只能在字符串中執行一次匹配。
若是沒有找到任何匹配的文本,將返回null
不然它將返回一個數組,其中存放了與它找到匹配文本有關的信息

'2a3f3s3g4'.match(/\d(\w)\d/g)
["2a3", "3s3"]

String.prototype.split(reg)
咱們常常使用split方法把字符串分割爲字符串數組,以下圖所示:
圖片描述
String.prototype.replace
'e9f9s9e9g9'.replace(/d/g,'X')
"eXfXsXeXgX"
'e9f4s9e5g8'.replace(/d/g,'X')
"eXfXsXeXgX"
我想把字符串中的每個數字找出來加一
'R9E8R8E0W1'.replace(/d/g,function(match,index){console.log(index); return parseInt(match)+1})
1
3
5
7
9
"R10E9R9E1W2"
具體運用:

<html>
 <body>
 <script type="text/javascript">
var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;
var url = 'http://www.ora.com:80/goodparts?q#fragment';
var result = parse_url.exec(url)
var names = ['url','scheme','slash','host','port','path','query','hash'];
var i 
for(i = 0;i<names.length;i++){
  document.write(names[i]+':'+result[i]);
  document.write('<br>')
  // ^ 字符表示這個字符串的開始,,它是一個標記,用來防止exec跳過不像URL的前綴
  // (?:([A-Za-z]+):)? 這個因子匹配一個協議名,但僅當它以後跟隨一個:(冒號)的時候才匹配。(?:....)表示一個非捕獲型的分組,前綴?表示這個分組是可選的。
}
 </script>
</body>
</html>

讀書筆記
參數 attributes 是一個可選的字符串,包含屬性 "g"、"i" 和 "m",分別用於指定全局匹配、區分大小寫的匹配和多行匹配。

g 執行全局匹配(查找全部匹配而非在找到第一個匹配後中止)。找到全局全部的制定字符。

<!DOCTYPE html>
 <html>
 <head>
     <title>html</title>
 </head>
 <body>
        <script type="text/javascript">
           var str = 'return something in your work,return'
          var patter = /return/g;//對return進行全局且不敏感搜索。
         document.write(str.match(patter))
        </script>
 </body>
 </html>

[abc] 表達式用於查找方括號之間的任何字符。方括號內的字符能夠是任何字符或字符範圍。

查找不在方括號之間的任何字符。
 <!DOCTYPE html>
 <html>
 <head>
     <title>html</title>
     <!-- [abc] 表達式用於查找方括號之間的任何字符。方括號內的字符能夠是任何字符或字符範圍。-->
 </head>
 <body>
        <script type="text/javascript">
           var str = 'is this your first time in china'
          var patter = /[a-g]/g;
         document.write(str.match(patter))
        </script>
 </body>
 </html>
<!DOCTYPE html>
 <html>
 <head>
     <title>html</title>
     <!-- [abc] 表達式用於查找不在方括號之間的任何字符。-->
 </head>
 <body>
        <script type="text/javascript">
           var str = 'is this your first time in china'
          var patter = /[^a-g]/g;
         document.write(str.match(patter))
        </script>
 </body>
 </html>

[^a-g]查找不在區間的任意字母,'^' 表示取反。

<!DOCTYPE html>
 <html>
 <head>
     <title>html</title>
     <!-- [abc] 表達式用於查找不在方括號之間的任何字符。-->
 </head>
 <body>
        <script type="text/javascript">
           var str = 'is this your first time in china'
          var patter = /[^a-g]/g;
         document.write(str.match(patter))
        </script>
 </body>
 </html>

[0-9]查找任何0-9之間的數字

<!DOCTYPE html>
 <html>
 <head>
     <title>html</title>
 </head>
 <body>
        <script type="text/javascript">
           var str = 'is this your 45 first time in china5489943'
          var patter = /[0-9]/g;
         document.write(str.match(patter))
        </script>
 </body>
 </html>

[A-z]查找任何大寫A到小寫z之間的字母

<!DOCTYPE html>
 <html>
 <head>
     <title>html</title>
 </head>
 <body>
        <script type="text/javascript">
           var str = 'is this your 45mke FDJSGfirstgreenAE GREtredime GFREGin jim michaelcfjrekgsjhina5489943fregtrytujy'
          var patter = /[A-z]/g;
         document.write(str.match(patter))
        </script>
 </body>
 </html>


(red|blue|green|mke|michael|jim) 查找任意指定的字符

<!DOCTYPE html>
 <html>
 <head>
     <title>html</title>
 </head>
 <body>
        <script type="text/javascript">
           var str = 'is this your 45mke FDJSGfirstgreenAE GREtredime GFREGin jim michaelcfjrekgsjhina5489943fregtrytujy'
          var patter = /(red|blue|green|mke|michael|jim)/g;
         document.write(str.match(patter))
        </script>
 </body>
 </html>

元宇符.用於查找單個字符,除了換行和行結束符。

<!DOCTYPE html>
 <html>
 <head>
     <title>html</title>
 </head>
 <body>
        <script type="text/javascript">
           var str = 'is this your 45mke FDJSGfirstgreenAE GREtredibmimeiom iwm GFREGin jim michaelcfjriqmekgsjhina5489943fregtrytuiumjy'
          var patter = /i.m/g; //ibm,iom,iwm,iqm,ium
         document.write(str.match(patter))
        </script>
 </body>
 </html>

exec() 方法用於檢索字符串中的正則表達式的匹配。

<!DOCTYPE html>
 <html>
 <head>
     <title>html</title>
 </head>
 <body>
        <script type="text/javascript">
           var str = 'is &this your 4&5e FDJSGfi&rstgremkenAE? GREtredibm&ime&iom moreiwm GFREGin jim michae&lcpowerfjriqmekgsm&jhina548|9943fregtrym&mktuiumjy'
          var patt = new RegExp('mk','g');
          var result;
          while((result=patt.exec(str))!=null){
              document.write(result)//mkmkmk
              document.write('<br>')
              document.write(patt.lastIndex)
              document.write('<br>')
          }
        </script>
 </body>
 </html>

我想替換一個sql文件中全部這樣的字符:

COMMENT '我的計提報表ID',
需求: 把COMMENT 後面的除了 ","  號和回車以外全部的字符替換爲空白
COMMENT .*[^\,\n]

延伸閱讀:
http://www.w3school.com.cn/js...


  1. abc
相關文章
相關標籤/搜索