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(indexIC
翻译成什么?AMTH
或ATHM
?谁必须是第一个?两个字母的字符串还是一个字母的字符串?我认为值得注意的是排序重要。/A | AL/
并不等同于/AL | A/
。你不能依靠“贪婪”来确保较长的匹配优先,它必须在交替中更早出现。@skille-谢谢。我已经改用映射来获得可预测的键顺序,并在回答中注意到你的评论。