逗号与换行符之间对的正则表达式 Javascript

问题描述

我正在尝试验证文本区域中的文本。 (我最终将使用带有这个正则表达式的 Angular 9 模式验证器)。你能帮我处理正则表达式吗?

文本将是 1 到 N 对字母数字字符,以逗号分隔,每对末尾有新行。每个字母数字前后的空格无关紧要。

示例数据(我不知道如何表示块引号中的换行符):

TEST12345、R5045876
EUDONOT1234、EF2345Y
AB345EEI2,FT0123

这是我在 RegExr 中为 Regex 尝试的方法,它似乎通过了,但我似乎无法将其用作我的模式字符串。

[ ]?[a-zAZ0-9](?:,[a-zA-Z0-9])*$

解决方法

你可以使用

/^[a-zA-Z0-9]+,[^\S\n]*[a-zA-Z0-9]+(?:\n[a-zA-Z0-9]+,[^\S\n]*[a-zA-Z0-9]+)*$/

参见regex demo

详情

  • ^ - 字符串的开始
  • [a-zA-Z0-9]+ - 一个或多个字母数字字符
  • , - 逗号
  • [^\S\n]* - 除换行符之外的零个或多个空白字符
  • [a-zA-Z0-9]+ - 一个或多个字母数字字符
  • (?: - 非捕获组匹配的开始
    • \n - 换行符,换行符
    • [a-zA-Z0-9]+,[^\S\n]*[a-zA-Z0-9]+ - 同上,一个单词、逗号、除 LF 之外的可选空格和一个单词
  • )* - 小组结束,重复一次或多次
  • $ - 字符串结束。
,

特别感谢 Wiktor,感谢他在评论中的帮助,以及他之前在此 Angular Pattern answer 中的回答,这让我想起了我忘记的事情。 :) 他真的应该为此得到一些分数。

他在评论中的第二个正则表达式示例是完美的答案,然后,由于我使用字符串为模式提供常规名称,这是我的模式:

private multilinePairsCommaDelimitedWords = '[a-zA-Z0-9]+,[^\\S\\n]*[a-zA-Z0-9]+(?:\\n[a-zA-Z0-9]+,[^\\S\\n]*[a-zA-Z0-9]+)*';

以及我的验证器的最终使用:

this.firstFormGroup = this._formBuilder.group({
  workstations: ['',[Validators.required,Validators.pattern(this.multilinePairsCommaDelimitedWords)] ],softDeleteDate: ['',Validators.required]
});