Удалите тег сценария из JSON, начиная с другого шаблона, то есть & lt; script & gt;, & lt; / script & gt; и% 2Cscript [duplicate]

Вот пример использования контроллера, введенного Guice.

/**
 * Loads a FXML file and injects its controller from the given Guice {@code Provider}
 */
public abstract class GuiceFxmlLoader {

   public GuiceFxmlLoader(Stage stage, Provider<?> provider) {
      mStage = Objects.requireNonNull(stage);
      mProvider = Objects.requireNonNull(provider);
   }

   /**
    * @return the FXML file name
    */
   public abstract String getFileName();

   /**
    * Load FXML, set its controller with given {@code Provider}, and add it to {@code Stage}.
    */
   public void loadView() {
      try {
         FXMLLoader loader = new FXMLLoader(getClass().getClassLoader().getResource(getFileName()));
         loader.setControllerFactory(p -> mProvider.get());
         Node view = loader.load();
         setViewInStage(view);
      }
      catch (IOException ex) {
         LOGGER.error("Failed to load FXML: " + getFileName(), ex);
      }
   }

   private void setViewInStage(Node view) {
      BorderPane pane = (BorderPane)mStage.getScene().getRoot();
      pane.setCenter(view);
   }

   private static final Logger LOGGER = Logger.getLogger(GuiceFxmlLoader.class);

   private final Stage mStage;
   private final Provider<?> mProvider;
}

Вот конкретная реализация загрузчика:

public class ConcreteViewLoader extends GuiceFxmlLoader {

   @Inject
   public ConcreteViewLoader(Stage stage, Provider<MyController> provider) {
      super(stage, provider);
   }

   @Override
   public String getFileName() {
      return "my_view.fxml";
   }
}

Обратите внимание, что этот пример загружает представление в центр BoarderPane, который является корнем сцены в рабочей области. Это не относится к примеру (деталь реализации моего конкретного варианта использования), но решил оставить его, поскольку некоторые из них могут оказаться полезными.

57
задан Kennedy 12 July 2011 в 05:01
поделиться

12 ответов

74
ответ дан RobG 18 August 2018 в 06:25
поделиться

/ (?:?! (& Л; / с \ ш) & л; [^ & л;] ) & л; / с \ ш * / г; - Удаляет любую последовательность в любой комбинации с

0
ответ дан Blackening 18 August 2018 в 06:25
поделиться

jQuery использует регулярное выражение для удаления тегов скриптов в некоторых случаях, и я уверен, что у его разработчиков была чертовски веская причина. Вероятно, какой-то браузер выполняет скрипты при их вставке с помощью innerHTML.

Вот регулярное выражение:

/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi

И перед тем, как люди начнут плакать, но регулярные выражения для HTML являются злыми »: Да, они , но для сценариев сценариев они безопасны из-за специального поведения - раздел <script> может вообще не содержать </script>, если он не должен заканчиваться на этом должность. Таким образом, легко сопоставить его с регулярным выражением. Однако при быстром просмотре регулярное выражение не учитывает конечные пробелы внутри закрывающего тега, поэтому вам нужно будет проверить, будут ли работать </script    и т. Д.

90
ответ дан Community 18 August 2018 в 06:25
поделиться
  • 1
    Если вы установите для свойства innerHTML элемента в документе разметку, содержащую элемент сценария с атрибутом defer, он будет выполнен в некоторых браузерах (например, IE). Однако, если одна и та же разметка назначается элементу, который отсутствует в документе, или атрибут отсрочки не установлен, сценарий не выполняется. Использование регулярных выражений проблематично, в некоторых случаях это не удастся. Prototype.js использует другой RegExp: /<script[^>]*>([\\S\\s]*?)<\/script>/img. – RobG 12 July 2011 в 14:10
  • 2
    – abernier 27 May 2012 в 19:09
  • 3
    Кто-нибудь использовал это с успехом в течение некоторого времени? – Ravindranath Akila 4 January 2014 в 17:31
  • 4
    Этот шаблон регулярного выражения равен $$$. Спасибо, что поделился! – ngoue 13 November 2014 в 23:10
  • 5
    but for script tags they are safe Здесь не удается: stackoverflow.com/a/18052486/2570622 <script type="text/javascript"> var test1 = "</script>"; var test2 = '<script>'; </script> – Pragy Agarwal 18 November 2015 в 03:04

Regexes являются битными, но если у вас есть строковая версия HTML, которую вы не хотите вводить в DOM, они могут быть лучшим подходом. Вы можете поместить его в цикл, чтобы обрабатывать что-то вроде:

<scr<script>Ha!</script>ipt> alert(document.cookie);</script>

Вот что я сделал, используя регулярное выражение jquery сверху:

var SCRIPT_REGEX = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi;
while (SCRIPT_REGEX.test(text)) {
    text = text.replace(SCRIPT_REGEX, "");
}
37
ответ дан Conrad Damon 18 August 2018 в 06:25
поделиться

Вот несколько сценариев оболочки, которые вы можете использовать для выделения разных элементов.

# doctype
find . -regex ".*\.\(html\|py\)$" -type f -exec sed -i "s/<\!DOCTYPE\s\+html[^>]*>/<\!DOCTYPE html>/gi" {} \;

# meta charset
find . -regex ".*\.\(html\|py\)$" -type f -exec sed -i "s/<meta[^>]*content=[\"'][^\"']*utf-8[\"'][^>]*>/<meta charset=\"utf-8\">/gi" {} \;

# script text/javascript
find . -regex ".*\.\(html\|py\)$" -type f -exec sed -i "s/\(<script[^>]*\)\(\stype=[\"']text\/javascript[\"']\)\(\s\?[^>]*>\)/\1\3/gi" {} \;

# style text/css
find . -regex ".*\.\(html\|py\)$" -type f -exec sed -i "s/\(<style[^>]*\)\(\stype=[\"']text\/css[\"']\)\(\s\?[^>]*>\)/\1\3/gi" {} \;

# html xmlns
find . -regex ".*\.\(html\|py\)$" -type f -exec sed -i "s/\(<html[^>]*\)\(\sxmlns=[\"'][^\"']*[\"']\)\(\s\?[^>]*>\)/\1\3/gi" {} \;

# html xml:lang
find . -regex ".*\.\(html\|py\)$" -type f -exec sed -i "s/\(<html[^>]*\)\(\sxml:lang=[\"'][^\"']*[\"']\)\(\s\?[^>]*>\)/\1\3/gi" {} \;
0
ответ дан davidcondrey 18 August 2018 в 06:25
поделиться

Попробуйте следующее:

var text = text.replace(/<script[^>]*>(?:(?!<\/script>)[^])*<\/script>/g, "")
0
ответ дан FelixSFD 18 August 2018 в 06:25
поделиться
1
ответ дан Jason Sebring 18 August 2018 в 06:25
поделиться

Всякий раз, когда вам приходится прибегать к очистке тегов на основе Regex. По крайней мере, добавьте пробел в закрывающий тег в форме

</script\s*>

. В противном случае такие вещи, как

<script>alert(666)</script   >

, останутся после окончания пробелов после того, как тэги будут действительны.

9
ответ дан neongrau 18 August 2018 в 06:25
поделиться
  • 1
    Проголосуйте, но, пожалуйста, не отправляйте такое сообщение отдельному ответу. это должен быть комментарий. – Rantiev 30 April 2016 в 13:58

Вы можете попробовать

$("your_div_id").remove();  

или

 $("your_div_id").html(""); 
0
ответ дан Pooja Roy 18 August 2018 в 06:25
поделиться

Почему бы не использовать jQuery.parseHTML () http://api.jquery.com/jquery.parsehtml/ ?

4
ответ дан shao 18 August 2018 в 06:25
поделиться

Если вы хотите удалить весь код JavaScript из некоторого текста HTML, то удалить <script> теги недостаточно, потому что JavaScript все еще может жить в «onclick», «onerror», «href» и других атрибутах.

Попробуйте этот модуль npm, который обрабатывает все это: https://www.npmjs.com/package/strip-js

0
ответ дан Shivanshu Goyal 18 August 2018 в 06:25
поделиться

Это регулярное выражение тоже должно работать:

<script(?:(?!\/\/)(?!\/\*)[^'"]|"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\/\/.*(?:\n)|\/\*(?:(?:.|\s))*?\*\/)*?<\/script>

Он даже позволяет иметь «проблематичные» переменные строки, подобные этим внутри:

<script type="text/javascript">
   var test1 = "</script>";
   var test2 = '\'</script>';
   var test1 = "\"</script>";
   var test1 = "<script>\"";
   var test2 = '<scr\'ipt>';
   /* </script> */
   // </script>
   /* ' */
   // var foo=" '
</script>

Он сглаживает ошибку jQuery и Prototype на этих ...

Редактировать 31 июля '17: Добавлены a) не захватывающие группы для лучшей производительности (и без пустых групп) и b) поддержка комментариев JavaScript.

10
ответ дан spaark 18 August 2018 в 06:25
поделиться
  • 1
    – Pragy Agarwal 18 November 2015 в 03:09
  • 2
    Я на самом деле использую злобное регулярное выражение для анализа HTML в нескольких случаях, и он хорошо работает. Я только что отредактировал сообщение и улучшил регулярное выражение с поддержкой экранированных кавычек в переменных JavaScript. (что бы избили мое регулярное выражение :-) – spaark 19 November 2015 в 06:59
  • 3
    Я использую это регулярное выражение в Notepad ++, чтобы очистить HTML-код нежелательных тегов скрипта, и он отлично меня обслуживает. – dev_masta 12 February 2017 в 15:50
  • 4
    вы regex интересно для его способности игнорировать вложенные строки .. но я бы предложил заменить начало на <script(?:, иначе я получаю всегда пустую группу захвата. Говоря об этом, вы видите решение для вашего регулярного выражения для захвата содержимого js? Было бы интересно не удалять теги отдельно .. – Kaddath 7 July 2017 в 14:22
  • 5
    на самом деле после тестов я обнаружил скрипты, которые игнорируются вашим регулярным выражением (не нашел почему, пример сам по себе немного длинный и неожиданно сломал регулярное выражение, когда я удалил раздел комментариев - возможно, что-то о четном или неравном числе ' или " -). Но тем хуже то, что некоторые комментарии к этому сообщению абсолютно правы: даже внутри строки, </script> заканчивает сценарий, это нормальное поведение, поэтому ваше регулярное выражение производит другой результат, чем метод DOM .. слишком плохо, я был энтузиастом: / – Kaddath 7 July 2017 в 16:36
Другие вопросы по тегам:

Похожие вопросы: