javascript - 如何检查字符串中的最后一个字符?

标签 javascript regex

我有以下线路选项:

  • <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 demoregex #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/

相关文章:

php - jQuery 脚本之间的冲突

javascript - 使用 jQuery 插入时并不总是设置图像的高度

javascript - 尝试实现一个改变html5文档背景的js颜色选择器

JavaScript 正则表达式 .test() 的意外行为

regex - 带正则表达式的 CASE : "set-valued function called in context that cannot accept a set"

javascript - 区分电子表格中的空单元格和 0 值

javascript - JQuery addClass 通过 CodePen 上的函数

java - 棘手的正则表达式 - 只替换第一次出现而不是下一次出现

c# - 正则表达式 - 只允许字符串中有单个空格

javascript - 替换javascript中两个子字符串之间包含的子字符串