Javascript Regex vs Java Regex

65
7

Я имею регулярное выражение в Javascript, который отлично работает: /:([\w]+): /g

Я работаю над преобразованием своего javascript-приложения в java, и я знаю, чтобы избежать \use\ie /:([\\w]+): /g, но мои тесты по-прежнему не возвращают соответствия для строки "hello: testsmilie: как твои дела?"

    Pattern smiliePattern = Pattern.compile("/:([\\w]+):/g");
Matcher m = smiliePattern.matcher(message);
if(m.find()) {
System.println(m.group(0));
}

В javascript он возвращает ": testsmilie:" просто отлично, поэтому я не уверен, в чем разница. Любая помощь приветствуется!

спросил(а) 2021-01-19T12:39:50+03:00 9 месяцев, 1 неделя назад
1
Решение
102

Ваше регулярное выражение в java может просто быть:

Pattern.compile(":[^:]+:")

Какое совпадение : за ним следует одна или несколько двух точек : за ними следуют :

Или, если вы хотите использовать \w вы можете использовать:

Pattern.compile(":\\w+:")

Если вы заметили, что вам не нужны скобки для группы (), чтобы получить результат, вы можете просто использовать:

System.out.println(m.group());

ответил(а) 2021-01-19T12:39:50+03:00 9 месяцев, 1 неделя назад
81

Вы должны узнать, как делается регулярное выражение Javascript, поскольку / являются разделителями реального регулярного выражения, а g является модификатором для глобального

В Java эквивалент :([\\w]+): и нет необходимости в глобальном флаге, поскольку вам просто нужно вызывать несколько раз .find() чтобы получить все совпадения

Вы должны взглянуть на regex101, который является хорошим веб-сайтом для тестирования регулярного выражения

ответил(а) 2021-01-19T12:39:50+03:00 9 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема