正则表达式:使用制表符替换4个空格的组(从新行到字符)

时间:2014-10-08 11:09:48

标签: regex

这里有很多关于用标签替换空格的问题,但这是我遇到的第一个需要限制替换为任何字符之前的空格的问题。

所以我从(?: )开始(那是4个空格)

这给了我:

enter image description here

但是我只想在任何单词之前匹配空格!所以我需要忽略greedyaccept之后的空格。

所以我尝试了起始行操作符^。给我^(?: )

仅匹配直接以^

为前缀的4个空格

enter image description here

所以我添加+来匹配很多,最终的正则表达式是^(?: )+,但是这给了我:

enter image description here

匹配起始^和字符之间的所有空格,就像我想要的那样,但是匹配不是四个一组!颜色块横跨整条线,这是错误的!

我需要一些正则表达专家向我解释我哪里出错!


修改

应该提到的,我没有使用任何特定的正则表达式引擎。

我宁愿解决方案不要使用外观,但如果必须,则必须这样做。


以下是测试文字:

                output.parents('.datatable-expanded').droppable({
                    greedy    : true,
                    accept    : '.ui-draggable',
                    tolerance : 'intersect',
                    hoverClass: 'drop-hover',
                    drop: function(e, ui) {
                        self.handleDrop(ui.helper, $(this).parents('tr').prev())
                    },
                });

3 个答案:

答案 0 :(得分:4)

这个似乎有效。 它匹配字符串的开头,加上一个或多个4个空格的组。

/\G {4}/g

Example here on regex101

答案 1 :(得分:1)

匹配一个或多个四个空格的组,锚定到该行的开头:

/^( {4})+)/

不需要后视或前瞻或环顾四周或\G位置断言支持,因此此正则表达式适用于任何引擎。

用正确数量的标签替换匹配(空格数除以4)。在JavaScript中:

line.replace(
    /^( {4})+/gm, 
    function(match) { return '\t'.repeat(match.length/4); } 
)

以上内容使用FF中提供的新String.prototype.repeat方法,最新版本的Chrome,Traceur或具有和声选项的节点。如果没有,那么这里是一个快速填充:

function repeat(str, n) { return new Array(n + 1).join(str); }

答案 2 :(得分:0)

这在vscode中有效。它将每行开始的空格数减半。

查找:^(( )+)\1

替换为:$1