Javascript 我如何让我的正则表达式翻译我给它的字符串,而不是它自己的输出?

Javascript 我如何让我的正则表达式翻译我给它的字符串,而不是它自己的输出?,javascript,regex,string,encryption,translation,Javascript,Regex,String,Encryption,Translation,所以我尝试使用正则表达式来创建一种语音密码;将单个字符或小字符组翻译成其他预先指定的单个字符或小字符组 Example Cipher: ND = ONZ ED = ANZ EE = AAZ AL = ORTH IC = AMTH CH = MAS FF = UUG LL = R OO = UUZ SS = OOG TH = ASG A = OTH B = YTH C = M D = N E = AZ F = UG G = ON H = S I = ATH J = EZ K = ETH L =

所以我尝试使用正则表达式来创建一种语音密码;将单个字符或小字符组翻译成其他预先指定的单个字符或小字符组

Example Cipher:

ND = ONZ
ED = ANZ
EE = AAZ
AL = ORTH
IC = AMTH
CH = MAS
FF = UUG
LL = R
OO = UUZ
SS = OOG
TH = ASG
A = OTH
B = YTH
C = M
D = N
E = AZ
F = UG
G = ON
H = S
I = ATH
J = EZ
K = ETH
L = R
M = YZ
N = OZ
O = UZ
P = YN
Q = ITH
R = YG
S = OG
T = AG
U = AN
V = YN
W = L
X = IG
Y = UTH
Z = IZ
我一直遇到的问题是,正则表达式转换了它刚刚翻译的字符串,因此它变成了ANIZAGOGSOOZAZ而不是ASGAZ。到达那里的过程如下所述-大写字母是最终产品的组成部分

发生了什么:

AN IZ AG OG S O OZ AZ

th = asg
     a = oth
         o = uz
             u = AN
             z = IZ
         t = AG
         h = s
             s = OG
     S
     g = On
         n = OZ
e = AZ
我想发生的事:

th = ASG
e = AZ
我如何防止regex翻译自己的输出(或者在翻译所有内容之前实际打印)

这里唯一真正的限制是,我需要能够轻松地更改输入和输出值,并创建更多或更少的值。我在Lingojam()中使用Javascript正则表达式,因此输入实际上如下所示:

/nd/g
/ed/g
/ee/g
/al/g
/ic/g
/ch/g
/ff/g
/ll/g
/oo/g
/ss/g
/th/g
/a/g
/b/g
/c/g
/d/g
/e/g
/f/g
/g/g
/h/g
/i/g
/j/g
/k/g
/l/g
/m/g
/n/g
/o/g
/p/g
/q/g
/r/g
/s/g
/t/g
/u/g
/v/g
/w/g
/x/g
/y/g
/z/g
创建字符串哈希以替换字符串。使用贴图可以保证键的顺序。通过使用、将键提取到数组中以及使用管道来创建正则表达式。与回调一起使用可对字符串进行编码

注意:如前所述-正则表达式中键的顺序很重要/A | AL/并不等同于/AL | A/,你不能依靠“贪婪”来确保较长的匹配优先,它必须在交替中提前出现

[代码>常量哈希地图=新地图(新地图)[[“ND”,“ONZ”,[“ANZ”,“ANZ”,,[“EE”,“AAAZ”,[“AL”,“OZ”,“AAAZ”,[“AL”,“OZ”,[“ND”,“ONZ”,[“ND”,“NZ”,,[新地图”(新地图(新地图)(新地图)[“ND”,“ND”,“NZ”,“NZ”,“ANZ”,“ANZ”,“ANZ”,“ANZ”,,,[“铝”,“其他,”以及,”以及[“铝”,“AZ”,“AZ”,,,,,[“铝”,“铝”,“其他,”以及,”他们,”除除除除除除除除除除除除除除“A”,“ASG”,“A”,“A”,“A”,“其他”,,,,,除除除除除,”除除除除除除除除除除除除除”,“A”,“A”,“外”,“其他”,,,,,,,,,,,除除除除除除除除除除除除除,[“K”,“ETH”],[“L”,“R”],[“M”,“YZ”],[“N”,“OZ”],[“O”,“UZ”],[“P”,“YN”],[“Q”,“ITH”],[“R”,“YG”],[“S”,“OG”],[“T”,“AG”],[“U”,“AN”],[“V”,“YN”],[“W”,“L”],[“X”,“IG”],[“Y”,“UTH”],[“Z”,“IZ”]); const pattern=new RegExp([…hashMap.keys())。join(“|”),“ig”); const result='THE'.replace(pattern,(str)=>hashMap.get(str)); 控制台日志(结果) 在代码方面,这些var的代币将是以下的一部分。这些var的代币将是以下的一部分。这些var的代币将是以下的一部分。这些var的代币将是以下的一部分。他们将是以下的一部分,他们将是以下的一部分。这些var的代币将是他们的一部分,他们将是他们的一部分,他们的一部分,他们的一部分,他们的一部分,他们,他们将是,他们的,他们,他们的,他们的,他们的,他们的,他们将是,他们的,他们的,他们的,他们的,他们的,他们将是,他们的,他们的,他们的,他们的,他们的,他们的,他们将是,他们的,他们的,他们的,他们的,他们的,他们的,他们的,他们的,他们的,他们的,他们的,他们的,他们的,他们的,他们的,他们的,他们的,他们的,他们的,他们的,他们的,他们的“ETH”]、[“L”、“R”],[M'、[N'、[OZ']、[O'、[UZ']、[P'、[YN']、[Q'、[ITH']、[R'、[YG']、[S'、[OG']、[T'、[AG']、[U'、[AN']、[V'、[YN']、[W'、[X'、[IG']、[Y'、[UH']、[Z']; 函数转换(str){ str=str.toUpperCase(); var指数=0, 结果=”; while(indexconsole.log(转换(“THE”))你为什么认为这里应该使用正则表达式?你不应该替换原来的字符串。你应该生成一个新的。你可能需要一个解析器。应该把
IC
翻译成什么?
AMTH
ATHM
?谁必须是第一个?两个字母的字符串还是一个字母的字符串?我认为值得注意的是排序重要。
/A | AL/
并不等同于
/AL | A/
。你不能依靠“贪婪”来确保较长的匹配优先,它必须在交替中更早出现。@skille-谢谢。我已经改用映射来获得可预测的键顺序,并在回答中注意到你的评论。