协助 REG EXP 匹配 5 位数字后跟未定义数量的文本,即 99999 AAA AAA 等

问题描述 投票:0回答:2

我正在尝试在 JS 中创建一个简单的正则表达式,但无论我尝试多少次,我似乎都无法让它工作。

在 AEM Designer 中使用 JS

我正在寻找正则表达式来比较用户条目:

  • 必须以5位数字开头(任意组合,无特定模式)

  • 后跟一个空格

  • 然后有文本和空格的任意组合 I.E. CAR 或 CAR IS 或 CAR IS SUPER FAST 或 CARISSUPER FAST。只是寻找文本,单个空格,文本等。但是,它不允许文本以字母以外的任何内容结尾(没有句点或额外的空格或特殊字符)

到目前为止,我已经弄清楚了 5 位数字,然后是一个空格,但我似乎无法让文本按我想要的方式工作。

这是我目前在表单中使用的代码:

var pattern = new RegExp("^([0-9]{5}).([A-Z]+)$");
var result = Page1.Section1.MOSID.rawValue

if (pattern.test(result)) {
    xfa.host.setFocus(NextField);
} else {
    xfa.host.messageBox("Incorrect formatting, please follow format shown in caption");
}

这让我走到了那里,但它只允许 1 行连续的文本,并且不允许中间有空格,也不考虑行尾。

我一直在尝试以下失败

("^([0-9]{5}).[A-Z]([.A-Z]*)$")
("^([0-9]{5}).([A-Z])([.A-Z]*)?$")
("^([0-9]{5})\s([A-Z])(\s\w+)*$")
("^([0-9]{5})\s([A-Z])+( \w+)*$")

我觉得我在围绕解决方案跳舞,但似乎不太合拍。

任何帮助将不胜感激。

javascript regex aem livecycle-designer
2个回答
0
投票
^\d{5}\s[A-Z\s]*[A-Z]$
  • ^
    = 字符串的开头
  • \d{5}
    = 5 位数
  • \s
    = 单个空格
  • [A-Z\s]*
    = 任何字母和空格序列,可能为空
  • [A-Z]
    = 一个字母,所以不能以空格结尾
  • $
    = 字符串结尾

演示


0
投票

不确定您在寻找什么,但是 JavaScript 中的一个简单正则表达式匹配一个 5 位数字后跟任意数量的文本,包括空格,如下所示:

/\d{5}\s*.*/

让我们分解一下:

  • /\d{5}
    正好匹配五个数字 (0-9)。
  • \s*
    匹配任意数量的空格(空格、制表符等)。
  • .*
    匹配 5 位数字后的任意数量的文本(包括空格)。

此正则表达式的可能成功匹配:

  • “12345”
  • “12345”
  • “12345abc”
  • “12345 abc”
  • “12345 abc def”

正则表达式

/\d{5}\s*.*/
也将匹配字符串“99999 AAA AAA”。

更新的表达式:

/^\d{5} [a-zA-Z\s]*[a-zA-Z]$/
,该表达式将匹配以 5 位数字开头,后跟一个空格,以一个字母结尾,中间是字母和空格的任意组合的字符串。

你的脚本有什么问题

("^([0-9]{5}).([A-Z]+)$")

  • 括号通常用作“捕获组”,简单来说,就是通过对正则表达式的各个部分进行分组来捕获匹配项。在您的代码中,它作为表达式中间点
    .
    周围的文字字符。
  • 修复: 点周围的括号应该被删除。
  • 其次,表达式中间的点
    .
    将只匹配单个字符,包括空格和其他非大写字母的字符。
  • 修复: 用字符类替换点以匹配任意数量的空格和任何大写字母。

正确的解决方案

/^[0-9]{5}\s*[A-Z\s]+$/

更新的解决方案强制使用空间后:

/^\d{5}\s+[A-Z\s]+$/i

© www.soinside.com 2019 - 2024. All rights reserved.