JavaScript Regex - PullRequest
       3

JavaScript Regex

0 голосов
/ 04 сентября 2010

У меня есть такая строка: 02-09-10, 20:19 (1 dagen geleden). Мне нужно 1 внутри скобок. Я использовал это регулярное выражение:

myStr.replace(/(.+*)\(([0-9]{1,}) dagen geleden\)/i, '$2')

Но это не работает ... Что делать?

С уважением, Додо

Ответы [ 5 ]

1 голос
/ 04 сентября 2010

.+* будет потреблять всю строку, так как она жадная, также использование + и * неправильно.

var myStr = "02-09-10, 20:19 (1 dagen geleden)";
myStr.match(/([0-9]+) dagen geleden\)$/)[1]; // 1
1 голос
/ 04 сентября 2010

(.+*) недействительно. Вы хотите (.+?) вместо этого. И используйте .match или re.exec, чтобы получить подстроку, а не .replace.

Если есть несколько появлений:

var rx = /\((\d+) dagen geleden\)/g;
var res = [];
while((m = rx.exec(myStr))) {
  res.push(m[1]);
}
return res;

В противном случае просто используйте:

var m = myStr.match(/\((\d+) dagen geleden\)/);
if (m)
  return m[1];
else {
  // not found.
}
0 голосов
/ 04 сентября 2010

Я не совсем уверен, как я снова оказался на этом вопросе, но я решил остановиться на том, что я высказал в комментариях ранее.Вы используете string.replace () , где string.match () или regex.exec () будет более подходящим.

Кроме того, вы можете достичь своей цели даже без использования регулярных выражений, что должно быть более эффективным и понятным, если вы не слишком разбираетесь в регулярных выражениях:

// The input string:
var myStr = "02-09-10, 20:19 (1 dagen geleden)";

// substring() would work just as well in place of slice() here:
alert(myStr.slice(
    // slice from the 1st character after the opening brace,
    myStr.indexOf("(")+1,
    // to the space just before "dagen"
    myStr.indexOf(" dagen")
));
// -> 1

На самом деле,Придуманное вами регулярное выражение настолько явно, что вы можете изменить первый аргумент slice на число, которое вы знаете:

myStr.slice(17, myStr.indexOf(" dagen"));
// -> 1
0 голосов
/ 04 сентября 2010

Вот ваша первая попытка регулярного выражения:

% js
Rhino 1.7 release 2 2009 03 22
js> var x = '02-09-10, 20:19 (1 dagen geleden)';
js> x.replace(/(.+*)\(([0-9]{1,}) dagen geleden\)/g, '$2');
js: uncaught JavaScript runtime exception: SyntaxError: Invalid quantifier *

Как уже упоминалось, вам не нужна эта звездочка. Просто избавься от этого:

js> x.replace(/(.+)\(([0-9]{1,}) dagen geleden\)/g, '$2');
1

Вы хотели бы получить "1".

Но ты можешь сделать это лучше. Зачем говорить «[0-9] {1,}», когда «\ d +» означает то же самое? Кроме того, вы уверены, что после этого финального символа ")" никогда не будет персонажей? Будут ли когда-нибудь пробелы или пробелы могут быть другими видами пробелов (возможно, вкладка)? Если вы действительно хотите получить этот номер до "dagen geleden", я бы написал его так:

js> x =  x.match(/\((\d+)\s+dagen\s+geleden\)/)[1];
1

Он поймает это число, даже если ваша строка содержит неожиданный мусор:

js> "garbage (255 dagen geleden) more garbage".match(/\((\d+)\s+dagen\s+geleden\)/)[1];
255
0 голосов
/ 04 сентября 2010

Чтобы найти это

var a = "02-09-10, 20:19 (1 dagen geleden)".match(/\(([0-9]+)/)

Чтобы получить номер

parseInt( a[1], 10)

Если вы хотите заменить 1 на 2

"02-09-10, 20:19 (1 dagen geleden)".replace(/\(([0-9]+)/, '(2')

И ... 1 даген геледен неверен грамматически;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...