簡體   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