翻转匹配子串

时间:2013-07-13 13:57:06

标签: javascript regex string

是否有一种干净的方法来反转匹配JavaScript中特定正则表达式的子串?

对于像/[a-g]+/这样的正则表达式以及像"sgsadebfdzgbd"这样的字符串来获取"sgsdfbedadbg",其中只有子字符串"adebfd""gbd"被撤销到位

2 个答案:

答案 0 :(得分:2)

使用replace的自定义功能:

your_string.replace(/([a-g]+)/g, function(all, word) {
     return word.split("").reverse().join("");
});

示例:

> "sgsadebfdzgbd".replace(/([a-g]+)/g, function(all, word) {
   return word.split("").reverse().join("");
});
"sgsdfbedazdbg"

你也可以使用这个更短,但(在我看来)不太清晰的版本:

your_string.replace(/[a-g]+/g, function(word) {
     return word.split("").reverse().join("");
});

答案 1 :(得分:1)

请注意,仅使用正则表达式是不可能的:

棘手的一点就是对任意长字符串进行字符串反转。正则表达式相当于对有限自动机的识别能力。这些(在某种意义上)只有一个固定的有限大小的存储空间。但是要处理任意长字符串的反转,你需要一个可以存储任意条目的存储器,比如堆栈。

这就是为什么你会看到另一个答案中使用的反向函数。