Javascript替换字符串中的字符*,+和/

Jac*_*ill 2 javascript replace special-characters

好吧,所以我目前正在以一种简单的方式模仿PHP的urlencode()函数,使用JS的escape()和一些字符串替换.我纯粹是看键盘字符,所以没有特殊的ASCII或Unicode字符.我遇到的问题是特定字符*,+和/ all在RegExp中具有特殊含义,并且看作JavaScript String Object方法使用RegExp参数,我无法完全复制PHP的urlencode().那么,如何使用JS设法在字符串中替换这些字符呢?

背景信息:
escape()与urlencode()的差异
@::不转换,应该是%40
&:被认为是一个html实体,因此被转义为%26amp%3B而不是%26
*:未转换,应该是%2A
+:未转换,应该是%2B
/:未转换,应该是%2F
<:被认为是一个html实体,因此被转义为%26lt%3B而不是%3C
>:被认为是一个html实体,因此被转义为%26gt%3B而不是%3E

HTML实体转换非常简单

str.replace(/&amp;/g, '%26').replace(/&lt;/g, '%3C').replace(/&gt;/g, '%3E');
Run Code Online (Sandbox Code Playgroud)

并且@可以替换,因为它不是保留的RegExp字符.
*表示{0}条件
+表示{1}条件
/是基本的RegExp标记字符

感谢您的时间.

15e*_*153 6

有没有理由不简单地用正则表达式中的反斜杠转义*,+和/字符?

s = s.replace( /\*/g, 'star' );
Run Code Online (Sandbox Code Playgroud)


Cas*_*Chu 5

对我来说,链接replaces 并不是很优雅。我会尝试:

var symbols = {
    '@': '%40',
    '&amp;': '%26',
    '*': '%2A',
    '+': '%2B',
    '/': '%2F',
    '&lt;': '%3C',
    '&gt;': '%3E'
};
str = str.replace(/([@*+/]|&(amp|lt|gt);)/g, function (m) { return symbols[m]; });
Run Code Online (Sandbox Code Playgroud)

方便的是,这也避免了原来的问题。