2016-12-02 25 views
1

男人,我很困惑。我一直在尋找像這樣的一百萬個問題,但即使簡化,所有答案都不起作用。正則表達式來查找特殊字符之間的文本

我想要捕獲$[]之間的文本。

爲什麼不\$\[.*\]工作?即使我遵循方括號指南,但它不起作用。

Jsfiddle to show that it doesn't work.

const content = "[Hey] (Ho) [f(1)]" 
const example1 = '\[.*\]' 
const example2 = '\[(.*?)\]' 
const regex1 = new RegExp(example1, "g") 
const regex2 = new RegExp(example2, "g") 
const newText1 = content.replace(regex1, "EXAMPLE1") 
const newText2 = content.replace(regex2, "EXAMPLE2") 
console.log(newText1) //Prints [Hey] (Ho) [f(1)] 
console.log(newText2) //Prints [Hey] EXAMPLE2HoEXAMPLE2 [fEXAMPLE21EXAMPLE2] 

回答

1

你想使用正則表達式如下您的輸入字符串獲取多個匹配:

\$\[(.*?)\] 

注意仔細的捕獲組是(.*?)。問號使匹配貪婪,這意味着它會在擊中最近的左括號後停止。

var string = "stuff $[stuff] hello world $[123] blah [abc] $[def] blah"; 

var regex = new RegExp(/\$\[(.*?)\]/g); 
var myArray; 

while ((myArray = regex.exec(string)) != null) { 
    alert(myArray[1]) 
} 

如果您已經使用了未經回火(.*)爲捕獲組,便有可能出現只有一個匹配從第一開口支架開始,並與最後的右括號結束;顯然不是你想要的。

演示在這裏:

JSFiddle

+0

有一個錯誤,它不會打印出正確的字符串,當它在結尾處找到兩個括號時。所以'$ [[hey]]'變成'[hey'。任何想法來解決這種行爲? – Yeats

+0

@Yeats如果你有嵌套括號,那麼你應該使用解析器。這個正則表達式中沒有「bug」。 –

+0

看起來很漂亮的車給我。 – Yeats

0

與子字符串使用:/\$\[(.*)\]/。而申請與exec

Demo regex

var res=/\$\[(.*)\]/g.exec("$[and]"); 
 
console.log(res) 
 
console.log(res[1])

相關問題