2011-12-16 99 views
3

我有一些变量JavaScript的正则表达式匹配

var jdbcurl="jdbc:oracle:thin:%2F%2Finnova:1521%3BServiceName%3Dorcl%3BMaxPooledStatements%3D20%3BCatalogOptions%3D0%3BBatchPerformanceWorkaround%3Dtrue" 

alert(jdbcurl.match(/:[\d]+/)); //gives me :1521 

我怎样才能得到jdbc:oracle:thininnova1521 & orcljdbcurl变种?

更新

您可以尝试here(如果需要)

回答

10
var jdbcurl="jdbc:oracle:thin:%2F%2Finnova:1521%3BServiceName%3Dorcl%3BMaxPooledStatements%3D20%3BCatalogOptions%3D0%3BBatchPerformanceWorkaround%3Dtrue" 
var myregex = /([a-z:]+):%2F%2F([a-z]+):(\d+)%3BServiceName%3D([a-z]+)%3BMaxPooledStatements%3D20%3BCatalogOptions%3D0%3BBatchPerformanceWorkaround%3Dtrue/ 
var matches = myregex.exec(jdbcurl); 
// jdbc:oracle:thin is in matches[1], innova is in matches[2], 1521 is in matches[3], and orcl is in matches[4] 
0

我说jdbcurl.split(/(%..)/)将是一个开始 - 然后你可以进一步检查是否保留他们的元素或将它们分割。

0

先使用decodeURIComponent(),然后使用分号分割。不要让自己难过!

5

你可能正则表达式维护过程中,如果你要解析多个URL也尝试一下本作更好的可读性网址:

var jdburl = unescape("jdbc:oracle:thin:%2F%2Finnova:1521%3BServiceName%3Dorcl%3BMaxPooledStatements%3D20%3BCatalogOptions%3D0%3BBatchPerformanceWorkaround%3Dtrue"); 

var myRegExp = new Regexp('([a-z:]+)://(\\w+):(\\d+);ServiceName=(\\w+);'); 

var matches = myRegExp.exec(jdburl); 
+0

我认为这是比我一个更好的解决方案。为什么你对\\ w和\\ d有双反斜杠? – 2011-12-16 08:43:11