2011-12-16 4 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:thin, innova, 1521 & orcl из jdbcurl вара?

Update

Вы можете экспериментировать 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-адресов во время обслуживания регулярных выражений, если вам придется разобрать несколько URLs:

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? –

+1

Это строка, а не литерал регулярного выражения, поэтому вам нужны дополнительные обратные косые черты. – 1983

+1

Лучше использовать decodeURIComponent: unescape устарел. – 1983

Смежные вопросы