У меня есть регулярное выражение в Javascript, которое отлично работает: /:([\w]+):/g
Я работаю над преобразованием своего javascript-приложения в java, и я знаю, что нужно избегать \ using \ т.е. /:([\\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:", поэтому я не уверен, в чем разница. Любая помощь приветствуется!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы должны узнать, как создается регулярное выражение Javascript, потому что / являются разделителями реального регулярного выражения, а g - модификатором для Глобальный
В Java эквивалент: :([\\w]+):, и нет необходимости в глобальном флаге, так как вам просто нужно несколько раз вызвать .find(), чтобы получить все совпадения.
Вам следует взглянуть на regex101, который является хорошим веб-сайтом для тестирования регулярных выражений.
Ваше регулярное выражение в java может быть просто:
Pattern.compile(":[^:]+:")
Какой соответствует :, за которым следует одна или несколько (без двух точек) :, за которыми следует :
Или, если вы хотите использовать \w, вы можете использовать:
Pattern.compile(":\\w+:")
Если вы заметили, что вам не нужны скобки для группы (), поэтому для получения результата вы можете просто использовать:
System.out.println(m.group());
Java использует другой набор правил, чем JavaScript, так же, как PHP против JavaScript, JS не позволяет заглядывать назад и другие виды, погуглите различия