<?xml version="1.0"?>
<syntax name="language-root.js.json">
	<zones>
		<!--Strings-->
		<zone>
			<expression>(?&lt;=^|,|\{)\s*(((")((?:[^"]|\\")+?)((?&lt;!\\)"))\s*(:))</expression>
			<capture number="1" name="x-assignment"/>
			<capture number="2" name="string.quoted"/>
			<capture number="3" name="punctuation.definition.begin"/>
			<capture number="4" name="name">
				<subzones>
					<include syntax="language-root.js" collection="character-escapes" />
				</subzones>
			</capture>
			<capture number="5" name="punctuation.definition.end"/>
			<capture number="6" name="operator"/>
		</zone>
		<zone name="string.quoted">
			<starts-with>
				<expression>"</expression>
				<capture number="0" name="punctuation.definition.begin"/>
			</starts-with>
			<ends-with>
				<expression>"</expression>
				<capture number="0" name="punctuation.definition.end"/>
			</ends-with>
			<subzones>
				<include syntax="language-root.js" collection="character-escapes" />
			</subzones>
		</zone>
		
		<!--Constants and punctuation-->
		<zone>
			<expression>(?:\b(?:(true|false|null)|((?:(?:(?:[0-9]+)?\.[0-9]+(?:[eE]-?[0-9]+)?)|(?:[0-9]+[eE]-?[0-9]+))|[0-9]+))\b)|(\{)|(\}(?:;|,)?)|(\[)|(\](?:;|,)?)|(:|,)</expression>
			<capture number="1" name="constant.language"/>
			<capture number="2" name="constant.numeric"/>
			<capture number="3" name="punctuation.brace.curly.open"/>
			<capture number="4" name="punctuation.brace.curly.close"/>
			<capture number="5" name="punctuation.brace.square.open"/>
			<capture number="6" name="punctuation.brace.square.close"/>
			<capture number="7" name="punctuation"/>
		</zone>
		
		<!--Invalid properties-->
		<zone name="invalid">
			<expression>[a-zA-Z_$][\w$]*</expression>
		</zone>
	</zones>
</syntax>