【发布时间】:2022-01-06 10:39:11
【问题描述】:
我正在尝试编写一个正则表达式,以不允许字符串中的任何位置出现双空格,并在 MO 或 GO 强制之前强制使用单个空格,开头和开头不允许空格字符串的结尾。
示例 1:It is 40 GO 对
示例 2:It is 40GO 错误
示例 3:It is 40 GO 错误
这是我到目前为止所做的^[^ ][a-zA-Z0-9 ,()]*[^;'][^ ]$,它可以防止开头和结尾的空格,以及“;”特点。这个就像一个魅力。
我的问题是不允许字符串中的任何地方出现双空格,并且在 MO 或 GO 字符之前强制使用空格。
经过几个小时的研究,我已经尝试了这些(从我之前写的 RegExp 开始):
防止出现双空格:^[^ ][a-zA-Z0-9 ,()]*((?!.* {2}).+)[^;'][^ ]$
在MO之前强制一个空格:^[^ ][a-zA-Z0-9 ,()]*(?=\sMO)*[^;'][^ ]$
但最后两个实际上都不起作用。我会感谢任何帮助我解决这个问题的人
【问题讨论】:
-
你为什么有这个?
[^;']倒数第二个字符应该是除;和'之外的任何字符吗?这个模式^[^ ][a-zA-Z0-9 ,()]*((?!.* {2}).+)[^;'][^ ]$的问题是应该至少有 4 个字符长,最后一个模式在环顾后有一个量词(?=\sMO)*你能用应该和不应该匹配的例子来更新这个问题,让它更清楚吗? -
我有它,因为字符串不能有任何单引号或分号。我将立即用示例编辑问题
-
或许可以这样试试
^(?!.*\S[MG]O\b)[a-zA-Z0-9,()]+(?: [a-zA-Z0-9,()]+)*$regex101.com/r/poDRsc/1 -
这对您的所有情况都有效吗?
^(?! )(?!.* $)(?!.*?\s{2,})(?!.*\S[MG]O).*$ -
@Thefourthbird 您的解决方案有效,非常感谢!你能解释一下这部分吗?
(?!.*\S[MG]O\b)据我所见,它叫lookahead,我知道我需要它,但不确定它是如何工作的
标签: javascript regex typescript