我有以下线路选项:
<40m:22s - 好的
<40m:22m; - 不行
<40h:22s;<40m:22m - 好的
<40m:22m;<40m:22m; - 不行
我需要检查分号。如果我有一个条目,那么它不应该是。如果我连续有多个条目,那么最后一个条目不应有分号。
现在我到目前为止只成功了:
([<>][1-9][0-9][hms]:[1-9][0-9][hms][;?]+)(?<!;)
如果有任何帮助、提示,我将不胜感激
最佳答案
你可以使用
^(?:[<>][1-9][0-9]?[hms]:[1-9][0-9]?[hms](?:;(?!$)|$))+$
或者,更详细一些,因为它包含主要模式的重复:
^[<>][1-9][0-9]?[hms]:[1-9][0-9]?[hms](?:;[<>][1-9][0-9]?[hms]:[1-9][0-9]?[hms])*$
请参阅regex #1 demo和 regex #2 demo .
详细信息:
-
^
- 字符串开头 -
(?:[<>][1-9][0-9]?[hms]:[1-9][0-9]?[hms](?:;(?!$)|$))+
- 一次或多次重复-
[<>]
- 一个<
或>
字符 -
[1-9]
- 非零数字 -
[0-9]?
- 可选数字(如果必须为必填,则删除?
) - [hms]
-
小时,
米or
s` -
:
- 冒号 -
[1-9][0-9]?[hms]
- 非零数字、可选数字和h
/m
/s
-
(?:;(?!$)|$)
- 一个;
不在字符串末尾或字符串末尾
-
-
$
- 字符串结尾。
^[<>][1-9][0-9]?[hms]:[1-9][0-9]?[hms](?:;[<>][1-9][0-9]?[hms]:[1-9][0-9]?[hms])*$
模式遵循 ^<MAIN>(?:<SEP><MAIN>)*$
方案,并且可以使用 RegExp
轻松动态构建此模式构造函数。
const texts = ['<40m:22s', '<40m:22m;', '<40h:22s;<40m:22m', '<40m:22m;<40m:22m;'];
const rx = /^(?:[<>][1-9][0-9]?[hms]:[1-9][0-9]?[hms](?:;(?!$)|$))+$/;
for (let text of texts) {
console.log(text, '=>', rx.test(text));
}
关于javascript - 如何检查字符串中的最后一个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67778644/