js中關於字串匹配的一些東西

2021-07-31 06:00:02 字數 3428 閱讀 6787

建立正規表示式的兩種方式

var expression = /pattern/flags

pattern : 正規表示式

flags : 匹配模式,有3個取值。g:全域性模式,表示不在發現第乙個匹配項之後就停止,而是應用於所有字串。i:不區分大小寫模式。m:多行模式,到達一行文字末尾時還會繼續查詢下一行中是否存在與模式匹配的項。

var pattern = new regexp(「正規表示式」,」g/i/m」);

兩種方式建立的是完全等價的兩個正規表示式。

但是要注意,有兩點不同的,一點是因為傳入建構函式中的是字串引數,所以某些情況下要對字元進行雙重轉義。所有元字元必須雙重轉義,已經轉義過的字元也要如此。如/\ [bc\]at/,與之等價的字串為」\\ [ bc\\]at」。還有一點特別的是,在ecmascript3中,字面量方式的正規表示式始終會共享乙個regexp例項,而使用建構函式的則每次都是乙個新例項。

var re = null,i;

for(i=0;i<10;i++)

for(i=0;i<10;i++)

由於regexp的例項屬性不會被重置所以在第乙個循壞中再次呼叫test方法會失敗。但是es5已經對此做出了規定,使用字面量也必須像建構函式一樣建立新的例項,ie9+,ff4+,chrome都做出了修正。

屬性說明

global

布林值,是否設定了g標誌

ignorecase

布林值,是否設定了i標誌

multiline

布林值,是否設定了m標誌

lastindex

整數,表示開始搜尋下乙個匹配項的位置,從0開始

source

表示式的字串表示,按照字面量形式而非傳入建構函式中的字串模式返回

直接看**

var text = "mom and dad and baby";

var pattern = /mom( and dad (and baby)?)?/gi;

var matches = pattern.exec(text);

alert(matches.index); //0

alert(matches.input); //mom and dad and baby

alert(matches[0]); //mom and dad and baby

alert(matches[1]); //and dad and baby

alert(matches[2]); //and baby

該方法返回的陣列,包含兩個額外的屬性,index和input

index–匹配項在字串中的位置

input–匹配的字串

返回的陣列第一項存著與整個模式匹配的字串,之後依次儲存與模式中的捕獲組匹配的字串

對於該方法來說,即使設定了g標誌,每次也只會返回乙個匹配項,但是每次呼叫exec都會在字串中繼續查詢,而若是不設定g標誌,每次呼叫也只會從頭開始查詢。換句話說,就是lastindex變不變的問題。設定了g標誌,該值會依次變化,否則每次都是0。

ie的js實現,即使是非g模式下,lastindex屬性每次也會變化。
返回乙個布林值,匹配則true,否則false。

在只想知道字串是否匹配而不需要知道其文字內容時,這是很有效的。

屬性說明

input

最近一次要匹配的字串

lastmatch

最近一次的匹配項

lastparen

最近一次匹配的捕獲組

leftcontext

input字串中lastmatch之前的文字

multiline

是否所有表示式都使用多行模式

rightcontext

input字串中lastmatch之後的文字

除了以上幾個屬性外,還有多達9個可以用於儲存捕獲組的建構函式屬性。通過regexp.$1,regexp.\$2..訪問

接下來我來說一下在字串物件中的模式匹配問題

在字串中呼叫它,和呼叫上面說到的exec()是一樣的。

match()接受乙個引數,要麼是乙個正規表示式,要麼是乙個regexp物件。

var text = "cat, bat, sat, fat";

var pattern = /.at/;

var matches = text.match(pattern);//與pattern.exec(text)一樣

alert(matches.index); //0

alert(matches[0]); //cat

alert(pattern.lastindex); //0

該方法唯一的引數與match()方法的引數相同。

返回字串中第乙個匹配項的索引,沒有則返回-1。

該方法始終都從字串的開頭開始往後找。

該方法用於替換字串。不僅可以字串替換字串,也可以利用模式來替換所有匹配模式的字串。

接受2個引數,第乙個引數既可以是regexp物件也可以是乙個字串,且這個字串不會被解讀為正規表示式的字面量。引數二可以是乙個字串或乙個函式。

來看乙個例子

var text = "cat, bat, sat, fat";

var res = text.replace("at","ond");

alert(res); //

"cond, bat, sat, fat"

res = text.replace(/at/g,"ond");

alert(res); //

"cond, bond, sond, fond"

當第二個引數是乙個函式時。在只要乙個匹配項的情況下,會向該函式傳遞3個引數:模式的匹配項,模式匹配項在字串中的位置,原始字串。若有多個捕獲組,則在第乙個引數和第二個引數中加上依次每個捕獲組的匹配項作為引數。這個函式返回乙個字串,表示替換之後的匹配項。

說的有點繞,看乙個例子就都明白了。

function

htmlescape

(text)

});alert(htmlescape("hello world!

"));

//hello world!

基於指定的分隔符將字串分割為多個字串,並將結果放在乙個陣列中。可以傳入2個引數,引數一是必須的,可以是字串或者regexp物件,引數二可選,用於指定陣列的大小。

var colortext = "red,blue,green,yellow";

var colors = colortext.split(/[^\,]+/); //["",",",",",",",""]

關於模式匹配就說這麼多了。

關於js的一些東西

常用的函式 slice 選取陣列值 用法 var arry a b c d arry.slice 1 結果 a,b arry.slice 1,3 結果b,c splice 向 從陣列中新增 刪除專案,然後返回被刪除的專案。用法 var arry a b c d arry.splice 2,0,e 結...

js 中字串的一些方法

var txt 這是乙個字串 console.log typeof txt string string 物件方法 length 字串的長度 charat 返回在指定位置的字元。charcodeat 返回在指定的位置的字元的 unicode 編碼。concat 連線兩個或更多字串,並返回新的字串。fr...

關於字串的一些。。。

首先呼叫這些函式需要使用標頭檔案include 1 des src abcd xyz abcdxyz char mystrcat char des,const char src 字串連線 2 字串比較 0,0,0 int mystrcmp const char str1,const char str...