Regex för <script>

Webbutveckling

0 svar · 167 visningar · startad av echoSwe

Medlem sedan nov. 20041 189 inlägg
Trådstart#1

Tjena

Jag har dessa två funktioner:

		private void maskScript()
		{
			// Add <![CDATA[ ... ]]> to mask script
			strXhtmlMarkup = Regex.Replace(strXhtmlMarkup,
				@"(<script[^<]*>){1}(?(?=\s*<!--)(\s*<!--)(\s*.*?)(//\s*-->)|(\s*.*?))\s*(</script>){1}",
				new MatchEvaluator(FixStyleAndScript),
				RegexOptions.IgnoreCase | RegexOptions.Singleline);
		}

		private string FixStyleAndScript(Match m)
		{
			string ret = "";
			string st, ed;

			st = "\r\n//<![CDATA[\r\n";
			ed = "\r\n//]]>\r\n";

			if (m.Groups[2].ToString().Trim() == "" && m.Groups[4].ToString().Trim() == "")
				st = ed = "";

			ret = m.Groups[1].ToString() + st;
			ret += m.Groups[2].ToString() + m.Groups[4].ToString() + ed + m.Groups[5].ToString();
			return ret;
		}

strXhtmlMarkup innehåller all kod i ett xhtml dokument, språket är C#.

Säg att detta finns i strXhtmlMarkup:

	<script type="text/javascript">
	//<![CDATA[
	function updateDateTime(el)
	{
		dateNow = new Date();
		
		document.forms[0].el.value = dateNow.getFullYear();
	}
	//]]>
	</script>

Då ändras detta till

<script type="text/javascript">
//<![CDATA[

	//<![CDATA[
	function updateDateTime(el)
	{
		dateNow = new Date();
		
		document.forms[0].el.value = dateNow.getFullYear();
	}
	//]]>
//]]>
</script>

Anledningen till att dessa två funktioner finns alls är att om det ser ut såhär:

<script type="text/javascript">
<!--
	function updateDateTime(el)
	{
		dateNow = new Date();
		
		document.forms[0].el.value = dateNow.getFullYear();
	}
	-->
</script>

så är det fel i xml, eftersom <!-- kommenterar bort scriptet. Då vill jag att detta ska ändras till cdata. Men problemet är ju att den ändrar även cdata som redan finns och lägger till en till cdata.

251 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)