正则表达式匹配除第一次出现之外的所有内容
Regular expression match all except first occurence
我需要一个正则表达式来匹配除第一个点(.(之外的所有出现。
例如,如果源是: 啊啊日清
表达式应匹配 BBB 和 CCC 之后的点,但与 AAA 之后的点不匹配。在其他作品中,它应该匹配除第一个点之外的所有点。
我需要它用于javascript正则表达式。
使用pcre(PHP,R(你可以这样做:
'G(?:'A[^.]*'.)?+[^.]*'K'.
演示
详:
'G # anchor for the start of the string or the position after a previous match
(?:'A[^.]*'.)?+ # start of the string (optional possessive quantifier)
[^.]* # all that is not a dot
'K # remove all that has been matched on the left from the match result
'. # the literal dot
<小时 />使用 .net:(简单,因为您可以使用可变长度的后视(
(?<!^[^.]*)'.
演示
<小时 />使用javascript,没有办法用单一的模式做到这一点。
使用占位符:
var result = s.replace('.', 'PLACEHOLDER')
.replace(/'./g, '|')
.replace('PLACEHOLDER', '.');
(或将所有点替换为|
,然后将第一次出现的|
替换为点(。
使用拆分:
var parts = s.split('.');
var result = parts.shift() + (parts.length ? '.': '') + parts.join('|');
带计数器:
var counter = 0;
var result = s.replace(/'./g, (_) => counter++ ? '|' : '.');
<小时 />使用 NodeJS(或任何其他允许回溯的实现(:
var result = s.replace(/((?:^[^.]*'.)?(?<=.)[^.]*)'./g, "$1|");
使用 arrow 函数 JavaScript 的单行解决方案(ES6(:
'aaa.bbb.ccc..ddd'
.replace(/'./g, (c, i, text) => text.indexOf(c) === i ? c : '|')
-> 'aaa.bbb|ccc||ddd'
相关文章:
- 在字符串列表中搜索任何出现的单词,如果单词的第一个字符匹配,则高亮匹配单词.Javascript正则表达式
- 如何使用正则表达式限制字符串的第一个字符
- 将具有两个此类子字符串的字符串中的第一个子字符串生成与正则表达式匹配,正则表达式通常默认匹配最后一个子字符串
- Javascript 正则表达式,只替换一次
- 正则表达式每行只匹配第一个字符串
- 在正则表达式中,如果第一个圆括号没有't匹配,当在JavaScript中使用replace()与在Ruby中使用
- 为什么两次运行完全相同的正则表达式的结果不同
- 用第一个匹配的正则表达式覆盖第二个匹配的regex
- 需要帮助设计正则表达式来选择'|'和'|'如果第一个'|'后面跟着一个空格
- 正则表达式第一个条目
- Javascript 正则表达式匹配一次
- 如何使用正则表达式每隔一秒选择一次
- 正则表达式:检索字符串第一次出现之前的行
- 正则表达式匹配除第一次出现之外的所有内容
- 具有非全局正则表达式的“match”和“exec”似乎返回第一个匹配项两次
- 如何在javascript正则表达式中第一次转义第二个捕获组
- 正则表达式在第一次匹配后停止
- 为什么只有第一个正则表达式才能正常工作
- 用于匹配两个/反斜杠/之间的字符串的正则表达式模式,该模式直接出现在另一个字符串的第一次匹配之后
- 查找第一次出现的正则表达式字符集