Как я могу извлечь тег сценария из некоторого текста, используя Regex? - PullRequest
2 голосов
/ 12 августа 2010

Я не очень хорошо знаю Regex, и я пытаюсь получить все теги сценария из некоторого извлеченного текста страницы. Я пробовал следующий шаблон:

<script.*?>.*?</script>

Но это, похоже, не возвращает тег скрипта, в котором есть какой-либо код. То есть это из следующего:

<script type="text/javascript" src="Scripts/Scipt1.js"></script>
<script type="text/javascript" src="Scripts/Scipt2.js"></script>

<script type="text/javascript">
   function SomeMethod()
   {

   }
</script>

Я получу только следующие результаты:

<script type="text/javascript" src="Scripts/Scipt1.js"></script>
<script type="text/javascript" src="Scripts/Scipt2.js"></script>

Как я могу вернуть все 3? (NB. Я хочу сохранить внешние теги сценария в результатах).

Ответы [ 3 ]

2 голосов
/ 12 августа 2010

. по умолчанию не соответствует переводу строк, поэтому вы получите только однострочные результаты.

Используйте RegexOptions.Singleline, чтобы исправить это.Он меняет значение ., чтобы соответствовать любому символу, включая символ новой строки, поэтому вы также получаете многострочные совпадения.

Не путайте имя.Также не путайте его с RegexOptions.Multiline, который совершенно другой (узнайте подсказки IntelliSense, чтобы узнать).

1 голос
/ 12 августа 2010

Вы должны использовать HTML Agility Pack .

Например:

var doc = new HtmlDocument();
doc.Parse(source);

var scripts = doc.DocumentNode.Descendants("script"); 
0 голосов
/ 12 августа 2010

В зависимости от качества вашего HTML.

var scripts = XDocument.Parse(HTMLSTRING).Descendants("SCRIPT");

Редактировать: версия до Xml.Linq:

XmlDocument xDoc = new XmlDocument();
xDoc.Load(HTMLSTRING);
XmlNodeList scripts = xDoc.SelectNodes("//*/SCRIPT");

Обратите внимание, что оба они не проверены ....

...