2015-07-03 43 views
1

我有以下的正则表达式:想更多关于分类我正则表达式(正则表达式)

var re = new RegExp(/\btranslate\b(\(([-+]?([0-9]+)(\.[0-9]+)?)\s([-+]?([0-9]+)(\.[0-9]+)?)\))/g); 

它匹配“翻译(-0.24588 125.3)”“kjgjhgjkg jgjgj kjgjkg HJ翻译(-0.24588 125.3)jjhkjghj“ string。

下面显示了我接触到的内容。我找到一个特定的字符串,但我想进一步替换匹配的字符串。

var re = new RegExp(/\btranslate\b(\(([-+]?([0-9]+)(\.[0-9]+)?)\s([-+]?([0-9]+)(\.[0-9]+)?)\))/g); 
undefined 
var string = "kjgjhgjkg jgjgj kjgjkg hj translate(-0.24588 125.3) jjhkjghj"; 
undefined 
var firstelem = re.exec(string); 
undefined 
firstelem 
["translate(-0.24588 125.3)", "(-0.24588 125.3)", "-0.24588", "0", ".24588", "125.3", "125", ".3"] 

这里,[ “翻译(-0.24588 125.3)”, “(-0.24588 125.3)”, “-0.24588”, “0”,” 0.24588" , “125.3”, “125”, “.3”]

我认为它应该只有一个匹配,那将是 [“translate(-0.24588 125.3)”]

所以,我其实需要更换翻译(-0.24588 125.3)翻译(-0.24588,125.3)“kjgjhgjkg jgjgj kjgjkg HJ翻译(-0.24588 125.3)jjhkjghj”字符串。我怎样才能做到这一点?

任何建议如何提高我的正则表达式或代码的其他部分是值得欢迎的。

+0

看一看,只有一个子匹配与[this snippet]一起返回(http://jsfiddle.net/1g9bm1fx/1/)。这不是你的正则表达式的问题。 –

+0

@stribizhev我看起来老兄。 –

+0

@stribizhev嗨,所以我实际上需要在字符串“kjgjhgjkg jgjgj kjgjkg hj translate(-0.24588 125.3)jjhkjghj”翻译(-0.24588 125.3)**翻译(-0.24588 125.3)**,所以我该如何做到这一点?? –

回答

1

要添加translate(value value)字符串中一个逗号,你可以修改你的代码是这样的:

var re = /\b(translate\b(?:\((?:[-+]?(?:[0-9]+)(?:\.[0-9]+)?)))\s([-+]?(?:[0-9]+)(?:\.[0-9]+)?\))/g; 
 
var str = 'kjgjhgjkg jgjgj kjgjkg hj translate(-0.24588 125.3) jjhkjghj'; 
 
var result = str.replace(re, "$1, $2"); 
 
document.write(result);

我所做的是重新分配的捕获组,这样只有两个其中。第一个(translate\b(?:\((?:[-+]?(?:[0-9]+)(?:\.[0-9]+)?)))匹配translate(value,第二个 - ([-+]?(?:[0-9]+)(?:\.[0-9]+)?\)) - 匹配value)

+0

不错的一件事我学到了一件事,就是让正则表达式不是你需要做的唯一事情,它将如何帮助你使你的解决方案成为可能Thanx @stribizhev –