2013-07-22 189 views
109

我想写一个正则表达式返回一个括号之间的字符串。例如:我想驻留在字符串之间的字符串“(”和“)”正则表达式获取Javascript中的括号之间的字符串

I expect five hundred dollars ($500). 

将返回

$500 

找到Regular Expression to get a string between two strings in Javascript

但我是新与正则表达式。我不知道如何在正则表达式中使用'(',')'

+0

可能重复的[正则表达式找到包括两个字符之间的字符串,同时排除定界符(http://stackoverflow.com/questions/1454913/regular-expression-to- find-a-string-included-between-two-characters-while-exclu) –

+0

您可以使用go-oleg的解决方案,稍作修改以测试美元符号:'var regExp =/\(\ $([^) ] +)\)/;' –

回答

303

您需要创建一组转义(与\)括号(与圆括号匹配)和一组创建捕获的常规圆括号组:

var regExp = /\(([^)]+)\)/; 
var matches = regExp.exec("I expect five hundred dollars ($500)."); 

//matches[1] contains the value between the parentheses 
console.log(matches[1]); 

击穿:

  • \(:匹配的开口括号
  • (:开始捕获组
  • [^)]+:匹配一个或多个非)字符
  • ):端捕获组
  • \):匹配闭的货币后括号

这里是关于RegExplained

+11

+1不错,像魅力一样工作。我想添加你添加这个http://tinyurl.com/mog7lr3在你的视觉解释。 – Praveen

+5

@ user1671639:已更新。感谢您的链接! –

+0

如果我需要在[某些事物] – CodeGuru

3

只是稍微数字的视觉解释标志:\(.+\s*\d+\s*\)应该工作

\(.+\) fo R内支架什么

+1

这将适用于示例文本,但如果在字符串后面出现另一个'''',例如'我期望500美元(500美元)“。 (但我要付钱)。“+”的贪婪将会捕捉更多。 –

+0

@Denomales那么你会如何捕获这些字符串的两个实例。理想情况下,我正在做类似的事情,但我想要: '($ 500)'和'(但我要付钱)' 匹配,但在两个分开的比赛,而不是被视为一个单一的匹配项目? 在此先感谢! –

23

尝试字符串操作:

var txt = "I expect five hundred dollars ($500). and new brackets ($600)"; 
var newTxt = txt.split('('); 
for (var i = 1; i < newTxt.length; i++) { 
    console.log(newTxt[i].split(')')[0]); 
} 

或正则表达式(这有点slow compare to the above

var txt = "I expect five hundred dollars ($500). and new brackets ($600)"; 
var regExp = /\(([^)]+)\)/g; 
var matches = txt.match(regExp); 
for (var i = 0; i < matches.length; i++) { 
    var str = matches[i]; 
    console.log(str.substring(1, str.length - 1)); 
} 
+2

今天在Chrome 59.0.3071上运行jsperf,正则表达式的速度提高了8% –

0
var str = "I expect five hundred dollars ($500) ($1)."; 
var rex = /\$\d+(?=\))/; 
alert(rex.exec(str)); 

将匹配的第一个数字开始以$跟着'')。 ')'不会成为比赛的一部分。该代码提醒第一场比赛。

var str = "I expect five hundred dollars ($500) ($1)."; 
var rex = /\$\d+(?=\))/g; 
var matches = str.match(rex); 
for (var i = 0; i < matches.length; i++) 
{ 
    alert(matches[i]); 
} 

此代码提示所有匹配项。

参考文献:

搜索 http://www.w3schools.com/jsref/jsref_obj_regexp.asp

搜索 “X(= Y?)” https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp

4

阀块Mr_Green's answer到官能编程风格,以避免使用 “= N?”临时全局变量。

var matches = string2.split('[') 
    .filter(function(v){ return v.indexOf(']') > -1}) 
    .map(function(value) { 
    return value.split(']')[0] 
    }) 
1

简单的解决方案

注意:该解决方案用于字符串只具有单一的 “(” 和 “)” 想在这个问题字符串。

("I expect five hundred dollars ($500).").match(/\((.*)\)/).pop(); 

Online demo (jsfiddle)

相关问题