【发布时间】:2012-07-21 19:30:49
【问题描述】:
是否可以从导致与正则表达式不匹配的字符串(其索引)中输出第一个字符?是否可以仅使用正则表达式匹配操作或必须使用更复杂的操作?
例如,在 JavaScript 中,我可能有一个正则表达式 /^\d{3}\s\d{2}$/,它匹配包含 3 个数字、后跟一个空格和另外 2 个数字的字符串。我有一个字符串"123a45" 应用这个正则表达式。这样做(例如,"123a45".match(/^\d{3}\s\d{2}$/))会返回null,因为正则表达式不匹配。如何获取导致这种不匹配的第一个字符(在本例中为 "a",索引为 3 的字符)?
对此的一个用例可能是根据用于验证的某些正则表达式将用户直接指向导致用户输入的字符串无效的字符。
【问题讨论】:
-
广义问题很可能是不可行的(一个例子是带有 OR
|的正则表达式,你不知道哪个字符实际上导致了问题,因为有两种可能的情况)。对于一些具体的问题,在某种程度上是可能的。 -
您能否确定匹配失败时使用了带有
|的正则表达式的哪一部分? -
例如:
([A-Z][0-9]{2}|[0-9]{2}[A-Z]),输入090,你会举报哪个字符?第一个0还是最后一个0?并且匹配失败是因为它在OR指定的所有情况下都失败了,正如所指出的那样,原因可能会有所不同。 -
是的,导致不匹配的第一个字符的简单识别在这种模棱两可的情况下不起作用。
标签: javascript regex