2013-09-01 173 views
3

我有这两个字符串...括号内的JavaScript正则表达式的GET字符串,删除括号

var str1 = "this is (1) test"; 
var str2 = "this is (2) test"; 

而且要编写一个正则表达式来提取的是括号内为"1""2"产生类似的字符串下面。

var str3 = "12"; 

现在我有这个正则表达式这是返回括号太...

var re = (/\((.*?)\)/g); 

var str1 = str1.match(/\((.*?)\)/g); 
var str2 = str2.match(/\((.*?)\)/g); 

var str3 = str1+str2; //produces "(1)(2)" 
+0

的可能重复[您如何访问匹配组在JavaScript正则表达式?](http://stackoverflow.com/questions/432493/how-do-you-访问的匹配的基团 - 在-A-JavaScript的正则表达式) – Barmar

回答

4

像这样

的Javascript

var str1 = "this is (1) test", 
    str2 = "this is (2) test", 
    str3 = str1.match(/\((.*?)\)/)[1] + str2.match(/\((.*?)\)/)[1]; 

alert(str3); 

jsfiddle

参见MDN RegExp

(x)的匹配x和记住匹配。这些被称为捕获 括号。

例如,/(foo)/在“foo bar”中匹配并记住'foo'。可以从结果数组的元素 1,...,[n]或者从预定义的RegExp对象的属性$ 1, ...,$ 9中调用匹配的子字符串 。

捕获组有性能损失。如果您不需要调用匹配的子字符串 ,则更愿意使用非捕获圆括号 (请参见下文)。

0

尝试:

/[a-zA-Z0-9\s]+\((\d+)\)[a-zA-Z0-9\s]+/ 

这将捕获的一个或多个括号内的任何数字。

例子:http://regexr.com?365uj

编辑:在这个例子中,你会看到替换场只有数字,而不是括号 - 这是因为捕获组$1仅捕获数字本身。

编辑2:

尝试是这样的:

var str1 = "this is (1) test"; 
var str2 = "this is (2) test"; 

var re = /[a-zA-Z0-9\s]+\((\d+)\)[a-zA-Z0-9\s]+/; 

str1 = str1.replace(re, "$1"); 
str2 = str2.replace(re, "$1"); 

console.log(str1, str2); 
0

试试这个

var re = (/\((.*?)\)/g); 

    var str1 = str1.match(/\((.*?)\)/g); 
    var new_str1=str1.substr(1,str1.length-1); 
    var str2 = str2.match(/\((.*?)\)/g); 
    var new_str2=str2.substr(1,str2.length-1); 

    var str3 = new_str1+new_str2; //produces "12"