【问题标题】:Javascript RegEx to XML Schema RegExJavascript RegEx 到 XML 模式 RegEx
【发布时间】:2016-05-11 02:16:27
【问题描述】:

我有这个 Javascript 模式

^(\b[A-Z]\w*(\s|\.)*)+$

我尝试在我的 XML 架构上使用它

<xs:pattern value="^(\b[A-Z][a-z]*(\s|\.)*)+$">

但是当我验证时,我收到一条错误消息 InvalidRegex: Pattern value '^(\b[A-Z][a-z](\s|.))+$' is not a有效的正则表达式。报告的错误是:“当前选项设置不支持此表达式。”。

有没有办法让我的 Javascript 模式适用于我的 XML Schema 模式?

【问题讨论】:

标签: javascript xml xsd


【解决方案1】:

并非总是可以将 JS 正则表达式转换为 XSD 正则表达式,如 Michael Kay answer 中所述,XSD 正则表达式不支持某些内容,如字边界、前瞻和其他内容。

基于your other question asking for a regex to test that all words starts with an uppercase character,您可以编写另一个对 XSD 有效的正则表达式,例如这个,测试一个(或多个)空格或点之后的以下字符不应为小写字母。

([^\s\.]*([\s\.]+[^a-z])?)*[\s\.]*

【讨论】:

    【解决方案2】:

    首先,XSD 正则表达式隐式锚定到字符串的末尾,因此您可以(并且必须)省略“^”和“$”。

    更难的问题是\b。在方括号之外,Javascript 中的 \b 匹配“单词边界”,即 ASCII 字母和数字序列与非(ASCII 字母和数字)组成的序列之间的边界。

    仔细看,除了确保字符串中至少存在一个字符之外,我看不到 \b 对您的正则表达式的实际贡献。据我所知,您的正则表达式可以简化为

    [A-Za-z\s\.]+ 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      • 1970-01-01
      • 2023-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多