调整滚动到 ID jQuery 脚本的正则表达式以包含阿拉伯字符

Adapt regex of scroll to ID jQuery script to include Arabic characters

我修改了一个滚动到 ID 的脚本来查找页面内容中的 h2 标签,获取文本,将其连字符并将其作为 ID 添加到 h2,然后创建目录 table-of-content 列表侧边栏中的 h3 scroll-to-ID 个链接。

    if($('h2').length >0 ) {
        var ToC = '<h3 class="on-this-page">On this page</h3>' + '<nav role="navigation" class="table-of-contents widget_pages widget">' + '<ul>';
        var el, title, titleFull, hyphenatedTitle;
        $('h2').not(".not-on-this-page, .hotspot-title").each(function() {
            el = $(this);
            titleFull = el.text();
            title = el.text().replace(/[^\w\s]/g, '');
            hyphenatedTitle = title.replace(/ /g, '-');
            $(el).attr('id', hyphenatedTitle );
        var link = '#' + el.attr('id');
        var newLine = '<li>' + '<a href="' + link + '"' + ' rel="m_PageScroll2id"' + '>' + titleFull + '</a>' + '</li>';
        ToC += newLine;
        }); //end each
        ToC += '</ul>' + '</nav>';
        $('.on-this-page-toc-wrapper').append(ToC); // show table of contents in element with class "on-this-page-toc-wrapper"

我现在正在建立一个英语和阿拉伯语网站。

该脚本在阿拉伯语中时断时续地运行,经检查,它似乎是在为每个单词创建带有一个连字符的 ID,而不是在它们之间使用连字符的阿拉伯语单词。因此,当页面上存在具有不同字数的 h2 时,脚本会起作用,但如果两个 h2 具有相同的字数,则脚本不起作用。我很确定问题在于这一行中的正则表达式:

title = el.text().replace(/[^\w\s]/g, '');

我如何调整此脚本以使其适用于我的英语和阿拉伯语标题?

非常感谢您的帮助。

问题是您想从字符串中删除所有标点符号,但 [^\w\s] 也匹配阿拉伯字母和数字。

您可以使用

修复以上代码
title = el.text().replace(/[\p{P}\p{S}]+/gu, '');

其中 /[\p{P}\p{S}]+/gu 匹配任何 Unicode 标点符号。

你可以test it at regex101.com.