正则表达式-匹配包含两个破折号但不包含三个破折号的模式

时间:2019-11-01 19:02:47

标签: regex

我试图找到正确的正则表达式以匹配以下模式:

let observer = db.collection('cities').where('state', '==', 'CA') .onSnapshot(querySnapshot => { querySnapshot.docChanges().forEach(change => { if (change.type === 'added') { console.log('New city: ', change.doc.data()); } if (change.type === 'modified') { console.log('Modified city: ', change.doc.data()); } if (change.type === 'removed') { console.log('Removed city: ', change.doc.data()); } }); });

但不是这个:

any_characters--any_characters

区别在于不需要的图案正好具有三个连续的破折号,而所需的图案正好具有两个破折号。

我曾经尝试过any_characters---any_characters(有点像胸部),但是当然不起作用,因为破折号与(.*)--(.*)匹配,因此上面的正则表达式将匹配任何东西,只要它具有两个或更多即可破折号。

2 个答案:

答案 0 :(得分:4)

如果支持环视,并且您想匹配不带空格的单词,并且单词不能包含---但必须包含-is

(?<!\S)(?!\S*---)\S+--\S+
  • (?<!\S)声明左侧的内容不是非空白字符
  • (?!\S*---)断言右边的内容不是3次---
  • \S+--\S+匹配1个以上非空格字符-以及1个以上非空白字符

Regex demo

答案 1 :(得分:2)

就像已经写在评论中一样,这应该可以解决问题。

 '.*[^-]--[^-].*'