{"ScriptPreparationCode":"var a = \u0022FOO BAR\u0022;\r\nvar b = \u0022foo bar\u0022;\r\n\r\nvar options = {\r\n numeric: true\r\n};\r\n\r\nvar collator = new Intl.Collator(\u0027en\u0027, options);\r\n\r\nvar reA = /[^a-zA-Z]/g;\r\nvar reN = /[^0-9]/g;\r\n\r\nfunction sortAlphaNum(a, b) {\r\n var regExp = /([0-9]\u002B)|([a-zA-Z]\u002B)/g;\r\n var aParts = a.match(regExp);\r\n var bParts = b.match(regExp);\r\n var collator = new Intl.Collator(\u0027en\u0027, { numeric: true });\r\n\r\n while (aParts.length \u003E 0 \u0026\u0026 bParts.length \u003E 0) {\r\n var aPart = aParts.shift();\r\n var bPart = bParts.shift();\r\n if (isNaN(aPart) \u0026\u0026 isNaN(bPart)) {\r\n if (aPart !== bPart) {\r\n return collator.compare(aPart, bPart);\r\n }\r\n } else {\r\n aPart = parseInt(aPart) || 0;\r\n bPart = parseInt(bPart) || 0;\r\n if (aPart !== bPart) {\r\n return aPart - bPart;\r\n }\r\n }\r\n }\r\n return aParts.length - bParts.length;\r\n}\r\n","TestCases":[{"Name":"sortAlphaNum()","Code":"sortAlphaNum(a,b) === 0","IsDeferred":false},{"Name":"Intl.Collator.compare()","Code":"collator.compare(a, b) === 0","IsDeferred":false}]}