RegEx查找不在两个其他字符之间的所有字符

时间:2016-11-15 16:43:21

标签: javascript regex regex-lookarounds

我正在寻找一个正则表达式(我可以在Javascript中实现,所以没有lookbehinds),它将匹配所有出现的字符,只要它不出现在两个其他字符之间。例如,我想匹配所有连字符,只要它们不在加号之间。

----- // should match.
+---+ // should not match
---+---+--- // should only match the first 3 and last 3 characters.

我尝试过调整this post中使用的方法,如下所示:

[-]+(?![^+]*\+)+

但它不符合要求。任何帮助是极大的赞赏。

P.S。专门寻找 REGEX 解决方案。我意识到这可能不是最佳解决方案,但我特别想提高我对正则表达式的了解。

3 个答案:

答案 0 :(得分:1)

请尝试以下方法:

(?:^-+|-+$)

Regex101演示:https://regex101.com/r/524iej/1

答案 1 :(得分:1)

如果分隔符(在您的情况下为+)总是成对出现,您可以使用它:

var str = 'a-b-+-c-+-d-e'; // delimter is +
matches = str.match(/-(?=([^+]*\+[^+]*\+)*[^+]*$)/g, '');
console.log(matches); // 4 matches of `-`

这匹配每个连字符后面有偶数个连字符的连字符(可能为零)。

答案 2 :(得分:0)

您可以使用.replace删除2 + s:

之间的所有文字
str = str.replace(/\+-*\+/g, '');

示例:

var str = '---+---+---';
str = str.replace(/\+-*\+/g, '');
//=> ------