我正在寻找一个正则表达式(我可以在Javascript中实现,所以没有lookbehinds),它将匹配所有出现的字符,只要它不出现在两个其他字符之间。例如,我想匹配所有连字符,只要它们不在加号之间。
----- // should match.
+---+ // should not match
---+---+--- // should only match the first 3 and last 3 characters.
我尝试过调整this post中使用的方法,如下所示:
[-]+(?![^+]*\+)+
但它不符合要求。任何帮助是极大的赞赏。
P.S。专门寻找 REGEX 解决方案。我意识到这可能不是最佳解决方案,但我特别想提高我对正则表达式的了解。
答案 0 :(得分: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, '');
//=> ------