Javascript 正则表达式到 XML 架构正则表达式

Javascript RegEx to XML Schema RegEx

我有这个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|.) )+$' 不是有效的正则表达式。报告的错误是:'This expression is not supported in the current option setting.'.

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

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

比较难的是\b。在方括号外,Javascript中的\b匹配一个"word boundary",这是一个ASCII字母和数字序列与非(ASCII字母和数字)组成的序列之间的边界。

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

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

并非总是可以将 JS 正则表达式转换为 XSD 正则表达式,XSD 正则表达式不支持某些内容,例如字边界、前瞻等,如 中所述.

基于,您可以编写另一个对XSD有效的正则表达式,例如这个,它测试一个(或多个)空格或点之后的字符不应该是小写字母.

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