\$.test.*?(.*?["'](.*?)["'].*?)
Это ваше регулярное выражение.Это регулярное выражение использует ленивый квантификатор между ["']
и другим ["']
.Это позволяет ему совпадать между "
(двойная кавычка) и '
одинарная кавычка, когда вы вводите: $.test("I am do'in testing")
Следовательно, он совпадает и захватывает I am do
в группе захвата # 1.
Другая проблема заключается в том, что после $
вы не можете экранировать точку, что может привести к совпадению любого символа вместо буквальной точки.
Вы можете использовать это регулярное выражение для сопоставления строки между одинарными или двойными кавычками, которые пропуск пропущенных кавычек с обратной косой чертой:
\$\.test[^'"]*(?:"([^"\\]*(?:\\.[^"\\]*)*)"|'((?:[^'\\]*(?:\\.[^'\\]*)*))').*
Демонстрация RegEx
Код:
final String regex = "\\$\\.test[^'\"]*(?:\"([^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)\"|'((?:[^'\\\\]*(?:\\\\.[^'\\\\]*)*))').*";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher( input );
while (matcher.find()) {
System.out.printf("Group-1: %s, Group-2: %s%n", matcher.group(1), matcher.group(2));
}