用于替换除找到的第一个和最后一个字符之外的特殊字符的正则表达式

lte*_*era 6 javascript regex replace sitefinity

我想从字符串标识符中删除每个特殊字符,并用连字符替换它们,这样它就可以是 URL 友好的。

这是 Sitefinity CMS URL 配置的一部分,这意味着每次我创建一个项目时,它都会获取其标题并根据我提供的正则表达式生成一个 URL slug。

因此,我只能使用一个正则表达式和一个替换文本,因为它是添加在 Sitefinity 的 CMS URL 配置字段中的。

我无法在多个步骤中使用代码或使用正则表达式。

因此,例如,如果我有以下标题字符串: Infographic phishing's awareness and $prevention (updated)

我希望它转变为: infographic-phishing-awareness-and-prevention-updated

在设置/高级/系统/站点 URL 设置/URLRulesClient 中,我们设置了默认的正则表达式: [^\p{L}-!$()=@\d_'.]+|.+$

问题在于,创建内容时,URL 仅用连字符替换空格,而不是特殊字符。

有没有办法可以用空格替换字符串末尾的最后一个特殊字符?

Sab*_*hip 1

您可以尝试这个正则表达式 - 它匹配除任何语言的任何字母、数字 (0-9)、破折号、下划线之外的所有内容:

\n
(?:\'s)?[^\\p{L}\\-\\d_]+|\\.+$\n
Run Code Online (Sandbox Code Playgroud)\n

如果您在 Sitefinity 中的标题是:\n信息图表网络钓鱼的意识和 $预防(已更新)。+!@=\xc2\xa8$\'^^;,:

\n

Sitefinity 使用自定义正则表达式生成的 URL 如下所示\n infographic-phishing-awareness-and-prevention-updated

\n

测试正则表达式

\n

结果 Sitefinity

\n

如果您想在 url 中保留点 (.),只需将其添加到方括号内即可 -\\.

\n
(?:\'s)?[^\\p{L}\\-\\d_\\.]+|\\.+$\n
Run Code Online (Sandbox Code Playgroud)\n

如果您想在网址中包含任何字符而不用破折号替换它们,只需将它们添加到方括号之间 - 下面是我如何包含括号的示例(我知道您想用破折号替换它们 - 只是作为示例以供参考) -\\(\\)

\n
(?:\'s)?[^\\p{L}\\-\\d_\\(\\)]+|\\.+$\n
Run Code Online (Sandbox Code Playgroud)\n

我在 Sitefinity 中测试了评论中的建议,但它们对我不起作用。您在 Sitefinity 中测试过它们吗?

\n