webForumDet fria alternativet

Regex för <script>

Webbutveckling

0 svar · 155 visningar · startad av echoSwe

Medlem sedan nov. 20041 189 inlägg
Frågan#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.

259 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)