如何删除匹配项的最后一个匹配项
How to delete the last occurence of the match?
我的歌词格式如下:
[00:26.8]Lo [00:27.0]rem[00:27.2] Ipsum[00:27.4] sam[00:27.6]ple [00:27.9]text[00:28.1] to [00:28.5]
[00:28.51]demonstrate[00:28.7] the[00:28.9] lyrics[00:29.1] text
我使用以下正则表达式来匹配时间标签 ( [hh:mm.ss]
):
/'['d{1,2}:'d{1,2}'.'d{0,2}']/ig
但是如何找到并删除最后一个时间标签([00:29.1]
在上面的示例中)?了解我可以匹配所有出现的情况,取最后一个,找到文本中相应标签的位置(用法lastIndexOf
),然后删除标签。但是有没有更好的方法来实现它呢?
更新。还有一个条件 - 如果时间标签位于行首,则不应将其删除。即在歌词的情况下:
[00:26.8]Lo [00:27.0]rem[00:27.2] Ipsum[00:27.4] sam[00:27.6]ple [00:27.9]text[00:28.1] to [00:28.5]
[00:28.51]demonstrate
找到并删除的标记应[00:28.5]
,而不是[00:28.51]
。
添加前瞻断言,以确保匹配的字符串后面没有[..]
/'['d{1,2}:'d{1,2}'.'d{0,2}'](?!(.|'n)*'[)/
正则表达式演示
也可以通过在吃掉之前添加一个贪婪的[^]*
或['s'S]*
来做到这一点。
var str = str.replace(/^([^]*)('['d{1,2}:'d{1,2}'.'d{0,2}'])/, "$1");
替换为捕获的第一部分。见小提琴
广告更新:在以下位置添加[^'n]
:
var str = str.replace(/^(['s'S]*[^'n])('['d{1,2}:'d{1,2}'.'d{0,2}'])/, "$1");
见小提琴
下面应该做(它确保想要的[hh:mm.ss]
后面没有任何其他左括号或右括号,直到字符串的末尾......这意味着这是您要查找的最后一个):
('['d{1,2}:'d{1,2}'.'d{0,2}'])(?=[^']'[]*$)
演示
相关文章:
- 从输入值中删除最后一个单词
- 如何使用JavaScript forloop从JSON中删除最后一个逗号
- Javascript:删除冒号的最后一个字符
- 如何在单击时从输入字段中删除最后一个字符
- 为什么jQuery正在删除文本的最后一个字符
- 正则表达式删除最后一个数字之后的字符串
- 从 Ol3 中的绘制交互中删除最后一个点
- 从路径中删除最后一个文件夹
- 使用javascript删除特定HTML实体(breadcrumb)的最后一个实例
- JavaScript-删除最后一个大写字母后的所有字符
- 删除第一个和最后一个<br/>来自字符串
- 如何删除字符串的第一个和最后一个字符
- jQuery删除除第一个和最后一个数字之外的所有数字
- 从网址中删除最后一个参数
- 如何删除匹配项的最后一个匹配项
- 如何删除 FOR EACH 循环中的第一个和最后一个值
- Jquery- 动态添加字段 - 防止删除最后一个项目
- (JS)如何删除动态创建的最后一个元素
- 从网址中删除最后一个元素
- 如何使用 Java 脚本中的最后一个索引删除子字符串