如何限制正则表达式只匹配不重复的单词

时间:2019-06-03 20:32:34

标签: regex

我有以下正则表达式:((\b\/?counter\b)[^\/]){1}

我想匹配/counter上的单词,但也希望匹配/counter/counter上不想要的单词。只要/counter不是正斜杠,我就不想多说。我只想确保只发生/counter

我在做什么错了?

enter image description here

正则表达式:https://regex101.com/r/7bHqRk/1/ 应接受的内容:

/counter
/counter?

不应该接受的内容:

counter
/counter/counter
counter/

编辑:

我的问题尚不清楚,但是/counter之前的任何内容都可以接受,只要它不与自己对立即可。所以http://localhost/controller1/counter很好,而http://localhost/counter/counter不好

3 个答案:

答案 0 :(得分:2)

如果您想在字符串的开头匹配/counter,则可以使用:

^/counter\b

如果/counter之后不能发生,但是之前可以发生任何事情,则可以使用经过调整的贪婪令牌方法来匹配直到第一次出现/counter之前的所有内容,然后断言它不会发生不再使用负前瞻(?!

^(?:(?!/counter\b).)*/counter\b(?!.*/counter\b)

Regex demo

答案 1 :(得分:1)

简化模式,以使用字符串标记的开头(?!)和否定的反行(/counter),以确保在/后面不加单个反斜杠({{1} }。

^\/counter(?!\/)

Regex101

比赛:

  

/计数器
  /计数器?

不匹配:

  

柜台
  /计数器/计数器
  柜台/
  /计数器/
  / counter / counter / counter

答案 2 :(得分:0)

此表达式将简单地将它们分开,我们可以在捕获它们后做我们想做的事情:

.+(counter).\1|(.+)

第一部分捕获任何重复的counter或我们不希望的输出:

.+(counter).\1

然后第二部分将捕获我们希望有效的内容:

(.+)

Demo

测试

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);

RegEx电路

jex.im可视化正则表达式:

enter image description here