繁体   English   中英

字符类中的乱序-正则表达式

[英]Range out of order in character class - regex

我有以下代码集

var nameStartChar = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]///\u10000-\uEFFFF
var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\u00B7\u0300-\u036F\\ux203F-\u2040]");
var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$');

它引发以下错误:

sqmtest I/JS: SyntaxError: Invalid regular expression: /[\-\.0-9A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD????-??\ux203F-???]/: Range out of order in character class
at new RegExp (<anonymous>)
at RegExp (<anonymous>)
at Object.$$_sax (http://com.hashcube.sqtest/modules/devkit-core/src/clientapi/native/dom/sax.js:1:5952)
at I (none:615:5092)
at z (none:615:6690)
at Object.jsio (none:615:7357)
at Object.$$_dom_parser (http://com.hashcube.sqtest/modules/devkit-core/src/clientapi/native/dom/dom_parser.js:1:3511)
at I (none:615:5092)
at z (none:615:6690)
at Object.jsio (none:615:7357)
at Object.$$_dom_DOMParser (http://com.hashcube.sqtest/modules/devkit-core/src/clientapi/native/dom/DOMParser.js:1:66)
at I (none:615:5092)
at z (none:615:6690)
at Object.jsio (none:615:7357)
at Object.$$_common.exports.install (http://com.hashcube.sqtest/modules/devkit-core/src/clientapi

完整的代码在这里-> https://github.com/hashcube/devkit-core/blob/hc/src/clientapi/native/dom/sax.js

任何正则表达式为何会失败的想法。 我尚未证实这一点,但看起来缩小可能会引起问题。

任何想法建议都会对我有所帮助。 如果需要,我可以提供更多详细信息

编辑

我有更多信息。 我在两台机器上查看了这两行的代码最小化(一台机器我收到此错误,另一台我没有收到错误)。 对我来说,这似乎是一个编码问题。 任何帮助,将不胜感激

机器有错误

var nameStartChar=/[A-Z_a-z\\xC0-\\xD6\\xD8-\\xF6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/,
  nameChar=RegExp("[\\\\-\\\\.0-9"+nameStartChar.source.slice(1,-1)+"????-??\\\\ux203F-???]"),
  tagNamePattern=RegExp("^"+nameStartChar.source+nameChar.source+"*(?::"+nameStartChar.source+nameChar.source+"*)?$"),S_TAG=0,S_ATTR=1,S_ATTR_S=2,S_EQ=3,S_V=4,S_E=5,S_S=6,S_C=7;

机器无误

var nameStartChar=/[A-Z_a-z\\xC0-\\xD6\\xD8-\\xF6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/,
  nameChar=RegExp("[\\\\-\\\\.0-9"+nameStartChar.source.slice(1,-1)+"·�~@-ͯ\\\\ux203F-�~A~@]"),]"),A~@
  tagNamePattern=RegExp("^0-9"+nameStartChar.sou+nameChar.source+"*(?::"+nameStartChar.source+nameChar.source+"*)?$"),S_TAG=0,S_ATTR=1,S_ATTR_S=2,S_EEouQ=3,S_V=4,S_E=5,S_S=6,S_C=7;

似乎您所提供的范围不是正则表达式的范围;

????-??\\\\ux203F-??? => ????-??\\ux203F-???

\\\\ux203F-??? 这不是正则表达式的范围,并且会引起问题。 休息似乎是正确的。

Regex接受此· ~@-ͯ\\\\\\\\ux203F- ~A~@ ,可以使用它(如果它适合您)。

检查字符范围链接,这可能有助于您重组正则表达式。

PS:“机器没有错误”返回“意外的令牌]”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM