1. 程式人生 > >JavaScript 正則表示式與字串查詢

JavaScript 正則表示式與字串查詢

首先提出一個問題:

如何取得一個給定的字串substr在另一個字串str中出現的次數?

字串匹配,第一想到的就是正則表示式,但我們最常使用的字面量來建立的正則表示式方式卻無法傳入變數,

這時應該使用另一種建立正則表示式的方式:建構函式,如下

var reg = new RegExp(substr, "g");

其中第一個引數表示要匹配的字串模式,因此可以傳入變數,不需要加/  /,第二個引數是可選的標誌字串。

可以傳入變量了,再介紹個字串基本包裝型別的方法:match()

語法為str.match(regExp),引數為一個正則表示式,若傳的不是正則則會隱式轉換,返回值為一個包含匹配結果的陣列,如果沒有匹配項,則返回null。

另外,字串的match方法與正則的exec()類似,返回匹配的詳細資訊;字串的search方法與正則的test()類似,只是用來檢視是否匹配。

回到最初的問題,完整的程式如下:

var str1 = "abctestctesqk1test23";
var str2 = "test";

function countSubstr(str, substr) {
    var reg = new RegExp(substr, "g");
    return str.match(reg) ? str.match(reg).length : 0;//若match返回不為null,則結果為true,輸出match返回的陣列(["test","test"])的長度
}
console.log(countSubstr(str1, str2));//輸出2
另外,對於變數的問題,不使用建構函式也可以解決,即使用eval():
var reg = "/" + substr + "/g";
reg = eval(reg);//不推薦!
但都知道不推薦使用eval()方法,所以還是推薦使用建構函式方法。

但還是有個問題,如果子字串中含有正則表示式中所謂的元字符(即+*?^等),則無法正常匹配。

因為此時正則表示式是在字串裡的,\是字串中的轉義符,也是正則表示式中的轉義符。那麼只加一個\的話,只能說明在字串中轉義,而js需要進一步把普通字串中的\變成正則表示式中的\,像是更深一則轉化的意思,稱為雙重轉義,這樣\\以後的意思是正則表示式中的轉義符(\)。 所以對於那些元字元如果不進行雙重轉義,則無法真正查詢要找的那個字元。這個問題尚未解決,不過一般字串查詢也很少有這些特殊字元吧,可以先一用。

相關推薦

JavaScript 表示式字串查詢

首先提出一個問題: 如何取得一個給定的字串substr在另一個字串str中出現的次數? 字串匹配,第一想到的就是正則表示式,但我們最常使用的字面量來建立的正則表示式方式卻無法傳入變數, 這時應該使用另一種建立正則表示式的方式:建構函式,如下 var reg = new R

JavaScript表示式表單驗證

一.非空驗證 判斷非空 最好還是不要使用trim()方法 有的瀏覽器可能不支援 推薦使用正則表示式 判斷是否為空 // " abc "----->"abc "------>"abc"function trim (txt) { var afterText = txt.replace(/^\s*

javascript表示式(6)——字串物件方法

String.protatype.search(reg) 1.search()方法用於檢索字串中指定的子字串,或檢索與正則表示式相匹配的子字串 2.方法返回第一個匹配結果index,查詢不到返回-1 3.search()方法不執行全域性匹配,它將忽略標誌g,並且總是從字串的

JavaScript使用表示式實現迷糊查詢

使用者在輸入框中輸入文字時,使用正則在資料區進行檢索,顯示出提示資訊. <head> <meta charset="UTF-8"> <title>模糊查詢</title> <style type="text/css

python表示式進行字串查詢

python進行字串的查詢,查找出現的位置 import re ####列表返回 pattern=re.compile(r'\d+') re1=pattern.findall('run 123 and 456') print(re1) ######迭代器返回 i

使用表示式字串查詢字串

直接上程式碼: String string = "asdasd#_%12.gifdadsa#_%2324.gif"; String regx = "#_%\\d+.gif"; Patter

JavaScript表示式分組模式:捕獲性分組非捕獲性分組及前瞻後顧(斷言)

javascript正則表示式裡分組模式以小括號來()表示分組,例:/([a-z])/ 捕獲性分組:() 捕獲性分組工作模式()會把每個分組裡匹配的值儲存起來。 比如利用捕獲性分組把 hello world 互換成 world hello: 方法一:

JavaScript表示式(三)字串例項方法search

還可以使用字串例項本身的方法來確定制定的正則表示式物件是否在字串中有匹配的詞。請看如下程式碼: function  doSearch(){                  //定義一個字串                  var str = "I have never

使用表示式去掉字串前面多餘的0和後面多餘的0

在專案開發過程中往往可能遇到需要去掉字串前面的0,或者末尾的0已進行方便的like查詢等操作: 去掉字串前面的0: QString str = "000000021"; str.remove(QRegExp("^(0+)"));//+:表示1次或多,^:匹配字串開頭或行頭 去

JavaScript 表示式驗證登入例項

程式碼片段: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>qq登入模擬測試</title> </head> <

JavaScript 表示式使用例項集合

1、字元 ^ 的使用  程式碼片段 <html> <head> <title>字元^的使用</title> <meta http-equiv="Content-Type" conten

JavaScript表示式表單驗證例項

/*是否帶有小數*/ function isDecimal(strValue ) { var objRegExp= /^\d+\.\d+$/; return objRegExp.test(strValue); } /*校驗是否中文名稱組成 */ function

js表示式驗證字串只包括大小寫字母下劃線和-

背景說明 在之前的開發過程中為了校驗一個欄位只含有大小寫字母,下劃線和-花費了不少力氣才搞定,想著趕快寫一篇部落格來記錄下來,日後開發一定會遇到!! 程式碼實現 首先定義一個變數用來存放驗證字串的正則表示式:var regex=/^[A-Za-z0-9_\-]+$/ig;

在Python中使用表示式去掉字串裡的html標籤

有時候會獲得一些帶html標籤的字串,需要把html標籤去掉,獲得乾淨的字串,這時候可以使用正則表示式。 程式碼如下: import re htmeString = '''    <ul id="TopNav">    &nbs

使用表示式去掉字串前面和後面多餘的0

記錄一下小的工具程式碼 1、去掉字串前邊的0 String str = "000000021"; String newStr = str.replaceAll("^(0+)", ""); System.out.println(newStr); 2、去掉字串後邊的0 String str

詳解JavaScript表示式(三)

本文是JavaScript正則表示式的第三篇文章,若是對正則表示式陌生的話,可以看我之前的兩篇文章。 詳解正則表示式(一) 詳解正則表示式(二) 貪婪模式和非貪婪模式 1、貪婪模式 在匹配成功的情況下,儘可能多的匹配。而JavaScript預設的就是貪婪模式。話不多說,直

詳解JavaScript表示式(一)

RegExp 物件表示正則表示式,它是對字串執行模式匹配的強大工具 這篇文章主要是對正則表示式有一個全面的瞭解,學完之後,當再次看到一些比較複雜的正則表示式的時候就可以逐步分析了。當然,再加上一段時間的練習,相信你自己也可以學會怎麼使用正則表示式的。 1、例項化正則表示式的兩種方

表示式判斷字串是否為數字

IF cl_abap_matcher=>matches( pattern = '^(-?[1-9]\d*(\.\d*[1-9])?)|(-?0\.\d*[1-9])$' text = '1.01' ) = abap_true. WRITE '數字'. ELSE.

手把手教你搞懂JavaScript表示式之方法

咱們來看看JavaScript中都有哪些操作正則的方法。 RegExp RegExp 是正則表示式的建構函式。 使用建構函式建立正則表示式有多種寫法: new RegExp('abc'); // /abc/ new RegExp('abc', 'gi'); // /abc/gi

JavaScript表示式之語法--詼諧易懂

正則表示式可以用來做表單校驗,也可以用來搜尋關鍵字,匹配字元等等,功能非常強大,但是剛開始看到正則的語法就頭大,什麼程式碼,明明亂碼好嘛?! 但是這麼好用的東西怎麼能不學習,偶然看到師父轉發的文章,簡直讓我這初學者醍醐灌頂,作者講的很通俗易懂。 在文章開始前,要了解es6字串操作方法