Java 与 Javascript 中的正则表达式模式

Regex patterns in Java vs Javascript

本文关键字:正则表达式 模式 Javascript Java      更新时间:2023-09-26

我有英国邮政编码的java正则表达式模式:

^([a-zA-Z]){1}([0-9][0-9]|[0-9]|[a-zA-Z][0-9][a-zA-Z]|[a-zA-Z][0-9][0-9]|[a-zA-Z][0-9]){1}([ ])([0-9][a-zA-z][a-zA-z]){1}$
我也想在Javascript中

使用它,但它不能在Javascript中正确验证邮政编码。Java和Javascript中的正则表达式模式之间有什么区别吗?

Java 和 JavaScript 正则表达式风格之间存在差异:JS 不支持后视。

则表达式风格之间的差异列表可以在维基百科上找到。

但是,这不适用于您的情况。我推测您的 JS 测试字符串具有虚假字符,例如。CR/LF.

尝试使用不带锚点的正则表达式并检查测试字符串的长度。

你的正则表达式在 JavaScript 中和 Java 中一样好。下面是一个简短的例子,使用我编造的一些数据。

var regex = /^([a-zA-Z]){1}([0-9][0-9]|[0-9]|[a-zA-Z][0-9][a-zA-Z]|[a-zA-Z][0-9][0-9]|[a-zA-Z][0-9]){1}([ ])([0-9][a-zA-z][a-zA-z]){1}$/;
var testData = [
  // valid
  'A11 1AA',
  'a1 1aa',
  'Aa1a 1AA',
  'aA11 1aa',
  'Aa1 1AA',
  // invalid
  'aa1aa 1aa',
  '@a11 1aa',
  'a1aa 1aa'
];
for (var i = 0; i < testData.length; i++) {
  if (testData[i].match(regex)) {
    console.log(testData[i] + ' is valid.');
  } else {
    console.log(testData[i] + ' is invalid.');
  }
}

奖金提示:

您可以简化一些正则表达式。{1}是不必要的,您不需要将空间包装在 [] 中。

 ^[a-zA-Z]([0-9][0-9]|[0-9]|[a-zA-Z][0-9][a-zA-Z]|[a-zA-Z][0-9][0-9]|[a-zA-Z][0-9]) [0-9][a-zA-z][a-zA-z]$

当然,您可以为捕获组保留所需的任何(),但我不知道您是否正在使用这些。