(function(Prism) { var javascript = Prism.util.clone(Prism.languages.javascript); Prism.languages.jsx = Prism.languages.extend('markup', javascript); Prism.languages.jsx.tag.pattern= /<\/?[\w\.:-]+\s*(?:\s+[\w\.:-]+(?:=(?:("|')(\\?[\w\W])*?\1|[^\s'">=]+|(\{[\w\W]*?\})))?\s*)*\/?>/i; Prism.languages.jsx.tag.inside['attr-value'].pattern = /=[^\{](?:('|")[\w\W]*?(\1)|[^\s>]+)/i; var jsxExpression = Prism.util.clone(Prism.languages.jsx); delete jsxExpression.punctuation jsxExpression = Prism.languages.insertBefore('jsx', 'operator', { 'punctuation': /=(?={)|[{}[\];(),.:]/ }, { jsx: jsxExpression }); Prism.languages.insertBefore('inside', 'attr-value',{ 'script': { // Allow for one level of nesting pattern: /=(\{(?:\{[^}]*\}|[^}])+\})/i, inside: jsxExpression, 'alias': 'language-javascript' } }, Prism.languages.jsx.tag); }(Prism));