JavaScript正则表达式匹配

JavaScript正则表达式匹配,javascript,regex,Javascript,Regex,我有一些变量 var jdbcurl="jdbc:oracle:thin:%2F%2Finnova:1521%3BServiceName%3Dorcl%3BMaxPooledStatements%3D20%3BCatalogOptions%3D0%3BBatchPerformanceWorkaround%3Dtrue" alert(jdbcurl.match(/:[\d]+/)); //gives me :1521 如何从jdbcurl变量中获取jdbc:oracle:thin,inn

我有一些变量

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

alert(jdbcurl.match(/:[\d]+/));    //gives me :1521
如何从
jdbcurl
变量中获取
jdbc:oracle:thin
innova
1521
&
orcl

更新


您可以尝试(如果需要)

我想说
jdbcurl.split(/(…)/)
将是一个开始,然后您可以检查元素是否保留它们或进一步拆分它们。

首先使用decodeURIComponent(),然后使用分号拆分。别让自己难堪

如果您必须解析多个url,也可以在regexp维护期间尝试此方法以提高url可读性:

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]
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);

我认为这是一个比我更好的解决方案。为什么\\w和\\d有两个反斜杠?它是一个字符串,不是regexp文本,所以需要额外的反斜杠。