我有以下java模式。
^[ -~&&[^"'<>\\]]*$
基本上,这是从空格到 ~ 字符(来自 ascii 表)的所有内容,不包括双引号、单引号、尖括号和反斜杠。
我想将其转换为 Javascript 模式,我将不胜感激。
最佳答案
我能想到的唯一方法是使用负向前瞻:
var pattern = /^(?:(?!["'<>\\])[ -~])*$/;
否定前瞻 (?!["'<>\\])
如果它与您不想要的字符之一匹配,将导致匹配失败。
如果您想为两种语言保持相同的模式,那么这个模式也应该适用于 Java。
编辑 - 分解:
- 领先
^
和尾随$
意味着整体模式必须与整个测试字符串匹配。 (这与 Java 版本相同。) - 外部
(?: )
分组称为“非捕获”组。用普通括号组成的普通组也可以工作,但当我不需要执行捕获部分时,我试图养成使用非捕获组的习惯。无论如何,可能都不是问题。然而,重点是我们需要将以下两部分组合在一起,以便*
运营商可以申请(更多详情见下文)。 (?! )
部分是负前瞻。它的作用是告诉匹配器查看先行中的模式是否匹配,但这样做没有通过模式“前进”。它就像一个“窥视角落”的工具。因为它是负向先行,如果模式确实匹配,则先行失败。这可以防止模式与 Java 版本中排除的标点符号匹配。- 先行之后是 Java 版本中的“所有 7 位 ASCII 字符”模式,减去连接子句(在 JavaScript 中不起作用)。
- 负向前瞻和“任意字符”模式的组合按
*
分组。 ,这意味着匹配器应该一遍又一遍地尝试将每个字符与测试字符串的末尾匹配。
关于java - 将 Java 模式转换为 Javascript 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26745708/