这里有很多关于用标签替换空格的问题,但这是我遇到的第一个需要限制替换为任何字符之前的空格的问题。
所以我从(?: )
开始(那是4个空格)
这给了我:
但是我只想在任何单词之前匹配空格!所以我需要忽略greedy
和accept
之后的空格。
所以我尝试了起始行操作符^
。给我^(?: )
仅匹配直接以^
所以我添加+
来匹配很多,最终的正则表达式是^(?: )+
,但是这给了我:
匹配起始^
和字符之间的所有空格,就像我想要的那样,但是匹配不是四个一组!颜色块横跨整条线,这是错误的!
我需要一些正则表达专家向我解释我哪里出错!
应该提到的,我没有使用任何特定的正则表达式引擎。
我宁愿解决方案不要使用外观,但如果必须,则必须这样做。
以下是测试文字:
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())
},
});
答案 0 :(得分:4)
答案 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