调整滚动到 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 标点符号。
我修改了一个滚动到 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 标点符号。