『壹』 js正則表達式的如何寫這樣一個匹配規則!1) 取指定范圍的內容 2)過濾指定范圍的內容
我只給一個例子你參考,中午時候我在上班沒時間幫你寫。
<script Language="javaScript">
var str1 = '11111111111abc="sadasda"asdasdabc="111111"nnnnnnn';
document.write(str1.replace(/abc="[0-9a-zA-Z]+"/g,'abc=""'));//替換為空
var str="Visit Microsoft!xyz='abc110'xyz='11'xyz=000xyz='ppp'";
document.write('<br>'+str.match(/xyz='[0-9a-zA-Z]+'/g));
var a = str.match(/xyz='[0-9a-zA-Z]+'/g);
document.write(a[1]);//得到的結果是個數組,這樣來獲取你想要的那個字元串的值
</script>
你把代碼在一個html文本上執行看看結果。正則是不需要jquery的,我不知道你從哪裡說正則需要jquery插件的。
懂了就是懂了,早點睡吧。
『貳』 js正則表達式 匹配兩個特定字元間的內容
匹配兩個特定字元間的內容由以下兩種方法:
1.以組形式捕獲
Reference:(.*?)About the author //多行模式 捕獲組1
以下是java語法
String regex = "Reference:(.*?)About the author"; //此為表達式
String input = ""; //此為待搜索的字元串
Pattern p = Pattern.compile(regex,Pattern.DOTALL); //多行模式
Matcher matcher = p.matcher(input);
ArrayList<String> list = new ArrayList<String>();
if (matcher.find()) {
list.add(matcher.group(1)); //這個地方捕獲組1
}
// list 就是搜索的結果
如果是單行模式請注意,表達式應寫為:
Reference:((.|
)*?)About the author //單行模式 捕獲組1
2.使用零寬斷言,表達式如下:
(?<=Reference:).*?(?=About the author)
『叄』 求javascript js正則表達式匹配以@@開頭@@結尾,不包含@@的字元串
這個簡單。正則表達式:
/@@(.*)@@/;
使用方式:
var
re
=
@@(.*)@@/;
var
result
=
re.exec(str);
如果匹配,result是非空的數組,第一個元素就是不包含@@的字元串。
『肆』 js str.match 正則匹配返回了a,b,c 這是個數組嗎怎麼變成[a,b,c]形式
是的,這本身是個數組,不需要再變。
『伍』 js正則表達式截取字元串數組
錯了好幾個地方啊,第一:正則不是全局的,第二:返回的數組中,第一組(下標為 0 的)專為整個屬正則匹配的結果,第三:js 的正則在匹配成功後就返回,後面的要再次調用!
varstr='';
varp=/wd*/g;
vars=[],m;
while(m=p.exec(str)){
s.push(m[0])
}
alert("==="+s[0]+"==="+s[1]+"==="+s[2]+"===");
『陸』 JS正則表達式基礎認知
正則表達式,又叫規則表達式,英文名Regular Expression,本質是操作字元串
1、模式匹配 表單驗證
2、文本檢索 搜索
3、替換 過濾
簡單,方便,性能高
var reg=new RegExp('規則','模式') 通過構造函數創造
var reg=/規則/模式 通過字面量創建
i 忽略大小寫
g 全局
m 多行
註:不分前後順序
str.match(正則) 返回數組 沒有返回 null
str.search(正則) 返回下標 沒有返回-1
str.replace(正則,替換成誰) 返回替換後的字元串
str.replace(正則,function(s){
s 符合正則條件的字元串
})
\d 數字 /[0-9]/
\s 空格
\w /[0-9a-zA-Z_]/ 單詞
\D 非數字 /[^0-9]/
\S 非空白
\W 非單詞 /[^0-9a-zA-Z_]/
.(點) 代表任意
\. 代表.
\\ 代表\
\\\\ 代表\\
\/ 代表/
只要有特殊意義的都要轉譯
+ {1,m} 若干個 最少1個最多不限
? {0,1} 可有可無
* {0,m} 可以沒有,多了不限
{n} 正好n個
{n,m} 最少n個 最多m個
{n,} 最少n個,最多不限
{,m} × 沒有這種寫法
^ 行首
註:如果^單獨使用,代表字元串列首,配合m使用會識別段落
$ 行尾
[] 中括弧
1、[]裡面的東西都是或的形式
2、[]裡面和放范圍
3、[^] 不代錶行首,代表除去裡面的范圍
4、其他特殊符號代表本身
1、test() 一般配合^ &
功能:用於檢測是否於正則匹配。
返回:布爾值,true匹配,false不匹配
語法:reg.test(檢測的內容)
2 exec()
功能:用於檢測是否於正則匹配。
返回:數組, 不匹配返回null
語法:reg.test(檢測的內容)
再做驗證之前:驗證分兩種,一種強校驗,一種弱校驗
(1)驗證手機號 /1[23457]\d{9}/
(2)驗證座機號 區號-座機號 /(0[1-9]\d-)?[1-9]\d{7}/
(3)驗證qq /[1-9]\d{4,11}/
(4)實現一個trim函數 去掉收尾空格 /^\s+|\s+$/g
(5)中文 /[\u4e00-\u9fa5]/
(6)驗證年齡 18-100 /^1[89]|[2-9]\d|100$/
(7)郵箱: [email protected] /^\w{5,12}@[a-z0-9]{2,8}\.com$/
(8) 過濾html /<[^>]+>/g;
1、分組 ab+ abbbb (ab)+
2、匹配子級
配合replace使用 str.replace(reg,function(s,a,b){
s是 整體
a是第一個括弧的項
b是第二個括弧的項
})
3、優選級 ^(1[89]|[2-9]\d|100)$
4、重復的子項
abbb /(a)(b)\2+/
今天先給大家總結到這兒,後續還會有補充
『柒』 js正則表達式問題:匹配<TD>....<BR>.....</TD>的串的正則表達式如何寫
/[\s\S]*?
[\S\s]*?/g
加g
是匹襲族仔配所有符拍汪合的
返回的是一個數組,,
不加G返回第一個穗則匹配的數據
『捌』 js數組和正則表達式
RegExp()的第二個參數主要支持g,i,m這3個修飾性字元
字元g,用來指定全局匹配
字元 i ,是用來指定大小寫為等同;
字元 m 是多行一詞的縮寫,設置匹配模式能夠在多行字元串中執行操作
var a = "javasssss";
var s = new RegExp("a","gi");
alert(a.match(s));
返回值為a,a
var a = "javasssss sssswww aaaaa";
var s = new RegExp("\\b\\w","gi");
alert(a.match(s));
返回值為j,s,a
\\b\\w是一個匹配模式,其中反斜杠表示轉義序列,而雙斜杠表示的是斜杠的意思,\b表示邊界的意思\w表示的任意的ASCii碼,指的就是每一個單詞的首字母;
var a = "javasssss sssswww aaaaa";
var r=new RegExp("\\x61");
var s=a.match(r);
alert(s);
x61表示的是a的十六進制的ascii碼,除了十六進制以外,還可以直接使用八進制數值來匹配例如;
var a = "javasssss sssswww aaaaa";
var r=new RegExp("\\141");
var s=a.match(r);
alert(s);
js中的特殊字元
\o表示空字元
\t表示製表位
\n表示換行符
\v表示垂直製表符
\f表示換頁符
\r表示回車符
\a表示alert字元
\e表示escape字元
\b表示回退字元
\cX表示控制自負^x
對於這些特殊的字元,如果在RegExp構造函數中使用,必須使用雙斜杠表示專業。
定義簡單的字元類
var a = "javasssss sssswww aaaaa";
var r=new RegExp("[abcsw]","gi");
var s=a.match(r);
alert(s);
返回值為
查找字元串中是否有字元類中的字母
定義反義字元類
var a = "aba abd abg abe";
var r=new RegExp("ab[^abc]","gi");
var s=a.match(r);
alert(s);
返回值為
第三個字元表示除了a,b,c以外的字元都可以
var r= new RegExp("[^012345679]","gi");
匹配除了數字以外任意的字元。反義字元類比簡單字元類更加強大和實用
如果任意雙位元組的漢字,你可以這樣設計
var r=new RegExp("\\u0000-\\u00ff","gi");
預定義字元類
『玖』 js正則匹配總結
js匹配是js中比較重要的一個概念,我們在工作中經常用到,但是往往都是記得不是很清楚,或者有些遺忘,這次記錄總結一下,讓自己加深一下印象,同時也會小夥伴們提供查閱資料的地方
正則匹配模式分為兩種,一種是貪婪模式,另一種是非貪婪模式
貪婪模式:在遇到歧義時候盡可能的多的匹配符合的結果
非貪婪匹配:在遇到歧義時候匹配到一次符合的結果就不匹配了
js默認是貪婪匹配模式,貪婪模式變成非貪婪模式只需要在貪婪量詞({n, }, {n, m}, + , ?, *)後面加一個?就行了
附加: 正則匹配中?的幾種用法
正則匹配的前瞻就是給正則匹配的選項定義一個斷言,或者說是一個條件比如:我要匹配一個字母,但是我的需求是字母後面必須是跟著一個數字的情況,那麼這種場景是怎麼實現了,就是用到前瞻的概念,那麼我想要他的前面也要是一個數字怎麼辦了,這就是後顧。
前瞻後顧的描述
正則匹配新特性
以上的三個匹配形式都是不被捕獲的,其中前兩個是不匹配的,他只是用來當作條件來用,第三個是要被匹配的
1:任何元字元在沒有寫量詞的情況下,只匹配一次
2:寫了量詞,默認是貪婪匹配
3:正則匹配一旦全部找到就不會在繼續去匹配,除非你設置了全局g
4:正則匹配按照匹配規如果中間中斷沒有匹配到,並且字元串沒有匹配完,會繼續按照匹配規則重新匹配
5:(pattern)如果匹配到了很多結果,只捕獲最後一次匹配到的結果
6:任何量詞都只作用於前面的元字元
1:source 2:global 3:ingoreCase 4:multiline 5:lastIndex
字元串滿足正則匹配規則就會返回true,但是如果正則匹配裡面含有全局的話,那麼多運行幾遍會報錯,因為正則每次匹配開始都是看lastIndex的,全局情況下lastIndex每次執行都會被改變
如果沒有找到任何匹配就返回null,如果找到了則返回一個數組,exec方法返回的數組的第 0 個元素是與正則表達式相匹配的文本
第 1 個元素是 正則匹配到 的第 1 個子表達式相匹配的文本(如果有的話)
第 2 個元素是正則匹配到 的第 2 個子表達式相匹配的文圓哪本(如果有的話)
...
以此類推。
其中還有三個參數
index:表示匹配到橘飢碼的文本的第一個字元所在的索引位置
input: 表示被匹配的文本
groups:表示有名的分組
在全局下也是一樣因為exec永遠只返回第一個匹配。
如果沒有找到任何匹配就返回null,如果找到了則返回一個數組,match方法返回的數組的第 0 個元素是與正則表達式相匹配的文本
第 1 個元素是 正則匹配到 的第 1 個子表達式相匹配的文本(如果有的話)
第 2 個元素是正則匹配到 的第 2 個子表達式相肢孝匹配的文本(如果有的話)
...
以此類推。
其中還有三個參數
index:表示匹配到的文本的第一個字元所在的索引位置
input: 表示被匹配的文本
groups:表示有名的分組
在非全局的情況下,這個方法和exec一模一樣,但是在全局的情況下,差別很大,在全局的情況下,只會返回匹配到的結果,並且lastIndex始終為0, 如果沒匹配到就返回null
該方法用來替換字元串,第一個參數是正則表達式,第二個參數可以是字元串也可以是函數
正則匹配測試工具
『拾』 JS正則表達式詳解
RegExp是JS的正則表達式對象,實例化一個RegExp對象有 字面量 和 構造函數 2種方式。
字面量實例化RegExp對象
var reg=/js/gi;
開始和結束的斜線/是正則表達式的邊界,//中間的文本是正則表達式文本,後面的gi是正則表達式的修飾符。
構造函數實例化RegExp對象
var reg=new Regex(『js』,』gi』);
第一個參數是正則表達式文本,第二個參數是正則表達式修飾符。
global:RegExp 對象是否具有標志 g。
ignoreCase:RegExp 對象是否具有標志 i。
lastIndex:一個整數,標示開始下一次匹配的字元位置。
multiline:RegExp 對象是否具有標志 m。
source:正則表達式的源文本。
RegExp 對象有 3 個方法:test()、exec() 以及 compile()。
test()
test() 方法檢索字元串中的指定值。返回值是 true 或 false。
示例:
var reg=/js/gi;
var result=reg.test(『I like js』);
結果:true
exec()
exec() 方法檢索字元串中的指定值。返回值是被找到的值。如果沒有發現匹配,則返回 null。
示例:
var reg=/js/gi;
var result=reg.exec(『I like JS』);
結果:JS
compile()
compile() 方法用於改變 RegExp。
compile() 既可以改變檢索模式,也可以添加或刪除第二個參數。
g:global全文搜索,如果不添加此參數,搜索到第一個匹配就會停止
i:ignore case 不區分大小寫,默認是區分大小寫的
m:multiple lines 多行搜索,默認只搜索第一行
正則表達式文本部分包含 原義文本字元 和 元字元, 其中的原義文本字元代表字元本身意義的字元,如abc123之類的字元。
元字元代表有特殊含義非字母字元,如、w、d、+、*、? 等。
常用的元字元
更多的JS正則元字元請參考: http://www.runoob.com/regexp/regexp-metachar.html
一般情況下正則表達式中的一個字元對應字元串中的一個字元,如表達式ab的含義是ab。
表達式中用 [] 來定義一個字元類,表示可以匹配[]裡面的這類字元,是一個泛指,而不是一一對應的關系。
如表達式[abc123],表示有其中一個字元串都可以匹配。
在字元類裡面使用橫線-連接2個數字或者字母就可以構建一個范圍類,如[a-zA-z0-9-]表示可以匹配26個大小寫字母和0-9的全部數字以及橫線-。
注意,要匹配橫線」-「,必須把橫線放在最後面。
預定義類可以理解為JS默認給我們寫好的范圍類,讓我們可以使用一個簡單的元字元來使用它。如」w」就是一個預定義類,它等價於范圍類[A-Za-z0-9_];「.」可以匹配除 「 」 之外的任何單個字元。
邊界包含2種,一種是以字元串開始或結尾的邊界,另一種是單詞邊界
量詞表示可以匹配連續多次的元字元
JS正則表達式默認是貪婪模式匹配,它會以最多匹配原則進行查找,非貪婪模式可以讓表達式以最少匹配原則進行查找。
非貪婪模式只需要在量詞後面加上」?」即可,如」123456789″字元串想以3個數字為一組進行匹配表達式寫法/d{3,5}?/g。
表達式中用 () 來定義一個分組,使元字元可以作用於一個表達式字元串組合,如/(js|php){3}/gi。
表達式中的每一個分組匹配的內容都是一個可以捕獲的變數,可以使用$1、$2、$3… 來取值,如表達式/(d{4})-(d{2})-(d{2})/中包含$1、$2、$3。如果想忽略分組匹配的內容,需要在分組前面增加「?:」,就可以得到分組匹配之外的內容。
前瞻就是正則表達式後面加上斷言部分,它不但要匹配表達式部分,還需要滿足斷言部分,匹配的結果不會包含斷言部分。
正向前瞻 exp(?=assert) 如 「w(?=d)」
負向前瞻 exp(?!assert) 如 「w(?!d)」
match()
stringObject.match(regexp)
match() 方法可在字元串內檢索指定的值,或找到一個或多個正則表達式的匹配。
如果 regexp 沒有標志 g,那麼 match() 方法就只能在 stringObject 中執行一次匹配。
如果沒有找到任何匹配的文本, match() 將返回 null。
否則,它將返回一個數組,其中存放了與它找到的匹配文本有關的信息。該數組的第 0 個元素存放的是匹配文本,而其餘的元素存放的是與正則表達式的子表達式匹配的文本。
search()
stringObject.search(regexp)
search() 方法不執行全局匹配,它將忽略標志 g。它同時忽略 regexp 的 lastIndex 屬性,並且總是從字元串的開始進行檢索,這意味著它總是返回 stringObject 的第一個匹配的位置。
replace()
stringObject.replace(regexp/substr,replacement)
字元串 stringObject 的 replace() 方法執行的是查找並替換的操作。它將在 stringObject 中查找與 regexp 相匹配的子字元串,然後用 replacement 來替換這些子串。如果 regexp 具有全局標志 g,那麼 replace() 方法將替換所有匹配的子串。否則,它只替換第一個匹配子串。
replacement 可以是字元串,也可以是函數。如果它是字元串,那麼每個匹配都將由字元串替換。但是 replacement 中的 $ 字元具有特定的含義。如下表所示,它說明從模式匹配得到的字元串將用於替換。
split()
stringObject.split(separator,howmany)
如果 separator 是包含子表達式的正則表達式,那麼返回的數組中包括與這些子表達式匹配的字串(但不包括與整個正則表達式匹配的文本)
正則表達式語法語意測試工具: https://regexper.com/