我有一个匹配表情符号的正则表达式,如:-),*< | :-)等。
现在我能够匹配这些,我想使用我的正则表达式匹配其字符以相反顺序写入的表情符号,例如( - :
看起来前瞻,后视和外观断言不会成功,因为这些都是非捕获的。有没有一种简单的方法可以反转正则表达式,而不必以相反的顺序完全重写它?
谢谢!
答案 0 :(得分:0)
更好的解决方案可能是使用您正在使用的语言生成正则表达式模式,这样您就不必手动创建每个表情符号向后和向前。例如,在ES6中:
var emoticons = [":-)", "*<|:-)"],
patterns = [];
var REVERSE_SWAP = {
"(": ")",
")": "(",
"]": "[",
"[": "]",
"<": ">",
">": "<"
}
for (let emoticon of emoticons) {
patterns.push(emoticon);
let reverse = [...emoticon].reverse();
for (let char in reverse) {
reverse[char] = REVERSE_SWAP[reverse[char]] || reverse[char];
}
patterns.push(reverse.join(""));
}
patterns = patterns.map(pattern => {
return pattern.replace(/([\/\\\|\(\)*])/g, (match => {
return "\\" + match;
}));
});
var regex = new RegExp("/(" + patterns.join("|") + ")/g");
这将生成以下RegEx模式:
/(:-\)|\(-:|\*<\|:-\)|\(-:\|>\*)/g