将Java模式转换为Javascript模式

时间:2014-11-04 21:51:08

标签: java javascript regex

我有以下java模式。

^[ -~&&[^"'<>\\]]*$

基本上这是从空格到字符(来自ascii表)的所有内容,不包括双引号,单引号,尖括号和反斜杠。

我想将其转换为Javascript模式,我将不胜感激。

1 个答案:

答案 0 :(得分:2)

我能想到的唯一方法是做出否定的预测:

var pattern = /^(?:(?!["'<>\\])[ -~])*$/;

否定前瞻(?!["'<>\\])如果匹配其中一个您不想要的字符,将导致匹配失败。

如果你想为两种语言保持相同的模式,那么这个模式也应该在Java中工作。

编辑 - 将其分解:

  • 前导^和尾随$表示整体模式必须与整个测试字符串匹配。 (这与Java版本相同。)
  • 外部(?: )分组称为“非捕获”组。用普通括号制作的普通小组也会起作用,但是当我不需要捕捉部分时,我试图养成使用非捕捉小组的习惯。可能不是问题。但重点是我们需要将以下两部分组合在一起,以便*运算符可以应用(更多信息如下)。
  • (?! )部分是负向前瞻。这样做是告诉匹配器查看前瞻中的模式是否匹配,但是这样做没有“推进”模式。这就像是一个“蠢蠢欲动”的工具。因为它是负向前瞻,如果模式 匹配,那么前瞻失败。这可以防止模式匹配Java版本中排除的标点字符。
  • 前瞻是Java版本中的“所有7位ASCII字符”模式,减去连接子条款(在JavaScript中不起作用)。
  • 负向前瞻和“任意字符”模式的组合与*分组,这意味着匹配器应该反复尝试将每个字符与测试字符串的末尾相匹配。