Как написать регулярное выражение для подстановочных знаков, таких как. (любой символ не пробел) и \ s (пробел) в условии ИЛИ - PullRequest
0 голосов
/ 05 июня 2018

У меня есть следующая строка.

some<script type=\"text/javascript\" language=\"javascript\"><!--\n" + " tempArr[4728] = 0; \n" + "//--></script>text

Сюда входят пробелы и другие не-буквенные символы.

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

some text

Я попробовал следующее регулярное выражение для этого.

<script(.)*(\s)*(.)*(\s)*(.)*<\/script>

Я могу получить вывод, но когда я наблюдаю регулярное выражение, я вижу повторяющиеся условия (несколько копий (.)* и (\s)*).

Как я могу упростить это с помощью регулярного выражения OR?

Я пытался использовать класс символов - см. здесь .

1 Ответ

0 голосов
/ 05 июня 2018

Используйте неохотный квантификатор и флаг dot-all, чтобы напрямую сопоставить весь тег script:

(?s)<script\b.*?</script>

Используйте его следующим образом:

str = str.replaceAll("(?s)<script\\b.*?</script>", "");

The *Флаг 1008 * также приводит к совпадению точки с новой строкой.

Установка \b, что означает «граница слова», после script означает, что он не будет случайно совпадать с более длинным именем тега, которое начинается с script, например, <scriptX>.

.*? соответствует нескольким символам, насколько это возможно, поэтому оно будет соответствовать только до следующего экземпляра </script> (в случае, еслитам как несколько скриптовых тегов).

...