關於檢索關鍵字的常用四種方法


前端開發過程中,我們經常會遇到關於檢索關鍵詞的問題。遇到這類問題,我們通常會用下面的四個方法來解決檢索關鍵詞的問題:

1.檢索一個固定的關鍵詞:

  1.1 String.prototype.indexOf()-->indexOf() 方法返回指定值在字符串對象中首次出現的位置。從 fromIndex 位置開始查找,如果不存在,則返回 -1

語法:

 

str.indexOf(searchValue[, fromIndex])

 

參數:

 searchValue

    一個字符串表示被查找的值。

 fromIndex 可選

   可選表示調用該方法的字符串中開始查找的位置。可以是任意整數。默認值為 0。如果 fromIndex < 0 則查找整個字符串(如同傳進了 0)。如果 fromIndex >= str.length,則該方法返回 -1,除非被查找的字符串是一個空字符串,此時返回 str.length。

描述:

字符串中的字符被從左向右索引。首字符的索引(index)為 0,字符串 stringName 的最后一個字符的索引是 stringName.length - 1

"Blue Whale".indexOf("Blue");     // returns  0
"Blue Whale".indexOf("Blute");    // returns -1
"Blue Whale".indexOf("Whale", 0); // returns  5
"Blue Whale".indexOf("Whale", 5); // returns  5
"Blue Whale".indexOf("", 9);      // returns  9
"Blue Whale".indexOf("", 10);     // returns 10
"Blue Whale".indexOf("", 11);     // returns 10

區分大小寫

indexOf 方法區分大小寫。例如,下面的表達式返回 -1:

"Blue Whale".indexOf("blue") // returns -1

檢測是否存在某字符串

當檢測某個字符串是否存在於另一個字符串中時,可使用下面的方法:

"Blue Whale".indexOf("Blue") !== -1; // true
"Blue Whale".indexOf("Bloe") !== -1; // false

1.2 String.prototype.indexOf()-->lastIndexOf()方法返回調用字符串中的索引對象指定的最后出現的位置,從fromIndex向后搜索。如果沒有找到該值返回-1。

 語法:

 

str.lastIndexOf(searchValue[, fromIndex])

 

參數:

 searchValue

    一個字符串表示被查找的值。

 fromIndex 可選

   可選表示調用該方法的字符串中開始查找的位置。可以是任意整數。默認值為 0。如果 fromIndex < 0 則查找整個字符串(如同傳進了 0)。如果 fromIndex >= str.length,則該方法返回 -1,除非被查找的字符串是一個空字符串,此時返回 str.length。

描述:

字符串中的字符被從左向右索引。首字符的索引(index)為 0,字符串 stringName 的最后一個字符的索引是 stringName.length - 1

'canal'.lastIndexOf('a');     // returns 3
'canal'.lastIndexOf('a', 2);  // returns 1
'canal'.lastIndexOf('a', 0);  // returns -1
'canal'.lastIndexOf('x');     // returns -1
'canal'.lastIndexOf('c', -5); // returns 0
'canal'.lastIndexOf('c', 0);  // returns 0
'canal'.lastIndexOf('');      // returns 5
'canal'.lastIndexOf('', 2);   // returns 2

區分大小寫

lastindexOf 方法區分大小寫。例如,下面的表達式返回 -1:

'Blue Whale, Killer Whale'.lastIndexOf('blue'); // returns -1

2.檢索有沒有相應關鍵字: 

String.prototype.search()-->String.prototype.search()方法執行一個搜索匹配正則表達式字符串對象。

 語法:

str.search(regexp)

參數: 

regexp

  該參數可以是需要在 stringObject 中檢索的子串,也可以是需要檢索的 RegExp 對象。

  注釋:要執行忽略大小寫的檢索,請追加標志 i。

說明

search() 方法不執行全局匹配,它將忽略標志 g。它同時忽略 regexp 的 lastIndex 屬性,並且總是從字符串的開始進行檢索,這意味着它總是返回 stringObject 的第一個匹配的位置。

實例

function testinput(re, str) {
  var midstring;
  if (str.search(re) != -1) {
    midstring = ' contains ';
  } else {
    midstring = ' does not contain ';
  }
  console.log(str + midstring + re);
}

 search()方法對大小寫敏感 :

<script type="text/javascript">

var str="Visit W3School!"
document.write(str.search(/w3school/))//輸出-1

</script>

 在本例中,我們將執行一次忽略大小寫的檢索: 

<script type="text/javascript">

var str="Visit W3School!"
document.write(str.search(/w3school/i))//輸出為6

</script>

3.檢索所有關鍵詞的內容: 

 String.prototype.match()-->match() 方法可在字符串內檢索指定的值,或找到一個或多個正則表達式的匹配。該方法類似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。

 語法:

str.match(regexp)

 

參數: 

searchvalue 必需。規定要檢索的字符串值。
regexp 必需。規定要匹配的模式的 RegExp 對象。如果該參數不是 RegExp 對象,則需要首先把它傳遞給 RegExp 構造函數,將其轉換為 RegExp 對象。

返回值

存放匹配結果的數組。該數組的內容依賴於 regexp 是否具有全局標志 g。

說明

match() 方法將檢索字符串 stringObject,以找到一個或多個與 regexp 匹配的文本。這個方法的行為在很大程度上有賴於 regexp 是否具有標志 g。

如果 regexp 沒有標志 g,那么 match() 方法就只能在 stringObject 中執行一次匹配。如果沒有找到任何匹配的文本, match() 將返回 null。否則,它將返回一個數組,其中存放了與它找到的匹配文本有關的信息。該數組的第 0 個元素存放的是匹配文本,而其余的元素存放的是與正則表達式的子表達式匹配的文本。除了這些常規的數組元素之外,返回的數組還含有兩個對象屬性。index 屬性聲明的是匹配文本的起始字符在 stringObject 中的位置,input 屬性聲明的是對 stringObject 的引用。

如果 regexp 具有標志 g,則 match() 方法將執行全局檢索,找到 stringObject 中的所有匹配子字符串。若沒有找到任何匹配的子串,則返回 null。如果找到了一個或多個匹配子串,則返回一個數組。不過全局匹配返回的數組的內容與前者大不相同,它的數組元素中存放的是 stringObject 中所有的匹配子串,而且也沒有 index 屬性或 input 屬性。

注意:在全局檢索模式下,match() 即不提供與子表達式匹配的文本的信息,也不聲明每個匹配子串的位置。如果您需要這些全局檢索的信息,可以使用 RegExp.exec()。

實例

<script type="text/javascript">

var str="1 plus 2 equal 3"
document.write(str.match(/\d+/g))//輸出1,2,3

</script>
var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
var regexp = /[A-E]/gi;
var matches_array = str.match(regexp);

console.log(matches_array);
// ['A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e']

 4.既可以找到關鍵字的位置,又可以返回關鍵字的位置: 

 RegExp.prototype.exec()-->exec() 方法為指定的一段字符串執行搜索匹配操作。它的返回值是一個數組或者 null。 如果你僅僅是為了知道是否匹配,可以使用 RegExp.test() 方法,或者 String.search() 方法。

語法

regexObj.exec(str)

參數

str要用正則表達式匹配的字符串。

返回值

如果成功匹配,exec 方法返回一個數組,並且更新正則表達式對象的屬性。返回的數組包括匹配的字符串作為第一個元素,緊接着一個元素對應一個成功匹配被捕獲的字符串的捕獲括號(capturing parenthesis)。(one item for each capturing parenthesis that matched containing the text that was captured.)

如果匹配失敗,exec 方法將返回  null

描述

// Match "quick brown" followed by "jumps", ignoring characters in between
// Remember "brown" and "jumps"
// Ignore case
var re = /quick\s(brown).+?(jumps)/ig;
var result = re.exec('The Quick Brown Fox Jumps Over The Lazy Dog');

下面的表格展示這個腳本的返回值:

對象 屬性/索引 描述 例子
result [0] 匹配的全部字符串 Quick Brown Fox Jumps
[1], ...[n] 括號中的分組捕獲 [1] = Brown
[2] = Jumps
index 匹配到的字符位於原始字符串的基於0的索引值 4
input 原始字符串 The Quick Brown Fox Jumps Over The Lazy Dog
re lastIndex 下一次匹配開始的位置 25
ignoreCase 是否使用了'i'標記使正則匹配忽略大小寫 true
global 是否使用了'g'標記來進行全局的匹配. true
multiline

是否使用了'm'標記使正則工作在多行模式(也就是,^ 和 $ 可以匹配字符串中每一行的開始和結束(行是由 \n 或 \r 分割的),而不只是整個輸入字符串的最開始和最末尾處。)

false
source 正則模式的字符串 quick\s(brown).+?(jumps)

實例

<script type="text/javascript">

var str = "Visit W3School"; 
var patt = new RegExp("W3School","g");
var result;

while ((result = patt.exec(str)) != null)  {
  document.write(result);//輸出W3School
  document.write("<br />");
  document.write(patt.lastIndex);//輸出14
 }
</script>

 注意:不要把正則表達式字面量(或者正則表達式構造器)放在 while 條件表達式里。由於每次迭代時 lastIndex 的屬性都被重置,如果匹配,將會造成一個死循環。   

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM