当替换字符串以\ 0开头时,ruby sub

时间:2018-03-19 18:00:08

标签: ruby string backreference

在ruby中,sub不允许用'\ 0'开头的另一个字符串替换字符串。

'a'.sub('a','\\0b')

返回:

'ab'

文档说\ 0被解释为反向引用,但由于第一个参数不是Regexp,我不明白它为什么会这样。

1 个答案:

答案 0 :(得分:2)

如果您希望将第二个参数解释为普通String,则可以将其转义为:

<div class="content">

            <div class="title"><a href="#">Section 1</a>        
            </div>

            <div class="text">Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
            </div>

            <div class="title"><a href="#">Section 2</a>    
            </div>

            <div class="text">Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
            </div>

            <div class="title"><a href="#">Section 3</a>
            </div>

            <div class="text">Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
            </div>

        </div>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <script> 

    jQuery(document).ready(function(){
        $('.title').click(function(){
            $('.text').toggle();
});

    });

    </script>

'a'.sub('a', Regexp.escape('\0b'))

都返回:

'a'.sub('a', '\\\0b')

有关此行为的说明,请参阅documentation

"\\0b"

  

该模式通常是Regexp;如果作为字符串给出,任何常规   它包含的表达元字符将按字面解释,   例如'\ d'将匹配反斜杠后跟'd',而不是数字。

     

如果替换是一个字符串,它将替换匹配的字符串   文本。 它可能包含对模式捕获组的反向引用   形式sub(pattern, replacement) → new_str,其中d是组号,或"\d",其中n是   团队名字。如果它是双引号字符串,则两个反向引用都必须   之前是一个额外的反斜杠。但是,在更换内   特殊匹配变量,例如$&amp;,不会引用当前的   比赛。如果replacement是一个看起来像模式捕获的String   组但实际上不是模式捕获组,例如“\'”,然后呢   必须在前面加上两个反斜杠,如“\”“。​​