我有以下正则表达式:((\b\/?counter\b)[^\/]){1}
我想匹配/counter
上的单词,但也希望匹配/counter/counter
上不想要的单词。只要/counter
不是正斜杠,我就不想多说。我只想确保只发生/counter
我在做什么错了?
正则表达式:https://regex101.com/r/7bHqRk/1/ 应接受的内容:
/counter
/counter?
不应该接受的内容:
counter
/counter/counter
counter/
编辑:
我的问题尚不清楚,但是/counter
之前的任何内容都可以接受,只要它不与自己对立即可。所以http://localhost/controller1/counter很好,而http://localhost/counter/counter不好
答案 0 :(得分:2)
如果您想在字符串的开头匹配/counter
,则可以使用:
^/counter\b
如果/counter
之后不能发生,但是之前可以发生任何事情,则可以使用经过调整的贪婪令牌方法来匹配直到第一次出现/counter
之前的所有内容,然后断言它不会发生不再使用负前瞻(?!
:
^(?:(?!/counter\b).)*/counter\b(?!.*/counter\b)
答案 1 :(得分:1)
简化模式,以使用字符串标记的开头(?!
)和否定的反行(/counter
),以确保在/
后面不加单个反斜杠({{1} }。
^\/counter(?!\/)
比赛:
/计数器
/计数器?
不匹配:
柜台
/计数器/计数器
柜台/
/计数器/
/ counter / counter / counter
答案 2 :(得分:0)
此表达式将简单地将它们分开,我们可以在捕获它们后做我们想做的事情:
.+(counter).\1|(.+)
第一部分捕获任何重复的counter
或我们不希望的输出:
.+(counter).\1
然后第二部分将捕获我们希望有效的内容:
(.+)
const regex = /.+(counter).\1|(.+)/gm;
const str = `http://localhost/controller1/counter
http://localhost/counter/counter`;
const subst = `$2`;
// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);
console.log(result);
jex.im可视化正则表达式: