سؤال

أنا أعمل على موقع Rails يستخدم CMS المشع وأنا أقوم ببناء الملاحة الحكومية وفقًا للطريقة الأولى في هذا الرابط.

أنا مطابقة عنوان URL على تعبيرات منتظمة لتحديد ما إذا كان سيتم إظهار الحالة النشطة لكل رابط تنقل أم لا. على سبيل المثال ، فيما يلي عنصرين لعينة الملاحة ، أحدهما لعنوان URL المشع /communications/ وواحد ل /communications/press_releases/:

    <r:if_url matches="/communications\/$/"><li class="bottom-border selected">Communications</li></r:if_url>
    <r:unless_url matches="/communications\/$/"><li class="bottom-border"><a href="/communications">Communications</a></li></r:unless_url>
    <r:if_url matches="/communications\/press_releases/"><li class="bottom-border selected">Press Releases</li></r:if_url>
    <r:unless_url matches="/communications\/press_releases/"><li class="bottom-border"><a href="/communications/press_releases">Press Releases</a></li></r:unless_url>

كل شيء يعمل بشكل جيد لصفحة النشرات الصحفية-أي عندما يكون عنوان URL /communications/press_releases يحصل عنصر NAV على فئة "المحددة" بشكل مناسب ، ولا يتم تحديد عنصر NAV للاتصالات. ومع ذلك ، لا يبدو أن التعبير العادي للاتصالات يعمل بشكل صحيح ، كما هو الحال عندما يكون عنوان URL /communications/ لا يوجد أي عنصر يحتوي على فئة "محددة" (لذلك يجب أن يفشل Regex في مطابقة). ومع ذلك ، لقد اختبرت

>> "/communications/".match(/communications\/$/)
=> #<MatchData:0x333a4>

في IRB ، وكما ترون ، يبدو أن التعبير العادي يعمل بشكل جيد. ما يمكن أن يسبب هذا؟

TL ؛ د: "/communications/" اعواد الكبريت /communications\/$/ في قذيفة الياقوت ولكن ليس في سياق الملاحة المشعة. ماذا يحدث هنا؟

هل كانت مفيدة؟

المحلول

من ويكي راديانت, ، يبدو أنك لست بحاجة إلى إضافة /S حول regexs أو الهروب /س. محاولة:

<r:if_url matches="/communications/$"><li class="bottom-border selected">Communications</li></r:if_url>
<r:unless_url matches="/communications/$"><li class="bottom-border"><a href="/communications">Communications</a></li></r:unless_url>
<r:if_url matches="/communications/press_releases/"><li class="bottom-border selected">Press Releases</li></r:if_url>
<r:unless_url matches="/communications/press_releases/"><li class="bottom-border"><a href="/communications/press_releases">Press Releases</a></li></r:unless_url>

ماذا يحدث خلف الكواليس هل تلك المكالمات المشعة Regex.new على السلسلة في matches, ، لذا فإن regex كنت تحاول مطابقتها من قبل كان هذا:

 Regexp.new '/communications\/$/'
# => /\/communications\/$\// 

وهو ما يترجم إلى "Slash Communications Slash Slash-Of Line Slash" الذي أشك حقًا هو ما تريده.

Ruby regexs مثيرة للاهتمام من حيث أن هناك رموز لكلا البدء (^) ونهاية الخط ($) وكذلك البدء (\A) ونهاية السلسلة (\Z). لهذا السبب سترى أحيانًا أشخاصًا يستخدمون \A و \Z في regexes.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top