Javascript Regex против Java Regex

1

Я имею регулярное выражение в 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:" просто отлично, поэтому я не уверен, в чем разница. Любая помощь приветствуется!

  • 0
    Java использует другой набор правил, чем JavaScript, во многом как PHP против JavaScript, JS не позволяет смотреть за спиной и другие виды, Google различия
Теги:

2 ответа

4
Лучший ответ

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

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

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

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

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

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

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

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

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


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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню