2012-10-20 103 views

回答

66

g適用於全球搜索。意味着它將匹配所有事件。你通常也會看到i這意味着忽略大小寫。

Refrence:global - JavaScript | MDN

中的「G」標誌表示正則表達式應針對字符串中的所有可能的匹配測試。

沒有g標誌,它只會測試第一個。

+0

所以當使用。測試功能,因爲它只找到第一個匹配無論如何,右/ g標誌是無關緊要的? – xr280xr

10

g是全局搜索的標誌。

全局搜索標誌使RegExp在整個字符串中搜索一個模式,創建一個匹配給定模式的所有匹配項的數組。

因此,/.+/g/.+/之間的差異在於g版本將查找每個出現的地方而不是第一個。

7

/.+/g/.+/之間沒有區別,因爲它們只會匹配整個字符串一次。如果正則表達式可以匹配多次或包含組,則g會有所不同,在這種情況下,.match()將返回匹配數組而不是組的數組。

3

G在正則表達式中定義了一個全局搜索,這意味着它將搜索所有行上的所有實例。在Javascript

22

實施例來解釋:

> 'aaa'.match(/a/g) 
[ 'a', 'a', 'a' ] 

> 'aaa'.match(/a/) 
[ 'a', index: 0, input: 'aaa' ] 
4

除了g標誌的已提及的意義,它影響regexp.lastIndex屬性:

的lastIndex的是正則表達式 實例的讀/寫整數屬性它指定了開始下一場比賽的索引。 (...)僅當正則表達式實例 使用「g」標誌指示全局搜索時,纔會設置此屬性。

參考:Mozilla Developer Network

3

正如@matiska指出的,g標誌設置lastIndex屬性爲好。

這樣做的一個非常重要的副作用是,如果您針對匹配的字符串重複使用相同的正則表達式實例,它最終會失敗,因爲它只會在lastIndex處開始搜索。

// regular regex 
 
const regex = /foo/; 
 

 
// same regex with global flag 
 
const regexG = /foo/g; 
 

 
const str = " foo foo foo "; 
 

 
const test = (r) => console.log(
 
    r, 
 
    r.lastIndex, 
 
    r.test(str), 
 
    r.lastIndex 
 
); 
 

 
// Test the normal one 4 times (success) 
 
test(regex); 
 
test(regex); 
 
test(regex); 
 
test(regex); 
 

 
// Test the global one 4 times 
 
// (3 passes and a fail) 
 
test(regexG); 
 
test(regexG); 
 
test(regexG); 
 
test(regexG);

相關問題