在Javascript中,如何将一个随机字母字符串划分为成对的子字符串,并连续替换为新字符?
因此,我正在进行一个项目,该项目涉及通过解析特定的翻译字母对,将字符串(如“als;kdfja;lsjkdf”)转换为常规字符(如“大狗”)。(即:“fj”=“D”) 问题是,我不能简单地在javascript中使用在Javascript中,如何将一个随机字母字符串划分为成对的子字符串,并连续替换为新字符?,javascript,string,replace,split,Javascript,String,Replace,Split,因此,我正在进行一个项目,该项目涉及通过解析特定的翻译字母对,将字符串(如“als;kdfja;lsjkdf”)转换为常规字符(如“大狗”)。(即:“fj”=“D”) 问题是,我不能简单地在javascript中使用.replace()函数,因为在很多情况下,它被赋予文本“fjkl”,需要找到“jk”,并从逻辑上解释“fj”和“kl”的冲突,以表示它找到了它。这对我来说不起作用,因为对我来说,它没有找到它,因为我只是试图一次查看两个字符内找到的对。(即:“fjkl”只能是“fj”和“kl”。)
.replace()
函数,因为在很多情况下,它被赋予文本“fjkl”,需要找到“jk”,并从逻辑上解释“fj”和“kl”的冲突,以表示它找到了它。这对我来说不起作用,因为对我来说,它没有找到它,因为我只是试图一次查看两个字符内找到的对。(即:“fjkl”只能是“fj”和“kl”。)
(最后,我打算只使用8个字符“asdfjkl;”,并将字符对设置为实际字母。(在这种替代方法中,fyi,“fj”或“jf”实际上是“”(空格)。)
在试图用javascript解决这个问题时,(我不知道其他语言是否可以更有效地处理它),我尝试用以下方式使用“split”函数。(免责声明,我不确定这是否是100%完美的格式)
var text=document.getElementById(“textbox”).value;//从textarea获取字符串
var pairs=text.split(/(..)/).filter(String);//将字符串拆分为对
如果(pairs==“fj”){replace(pairs,”}//某种替代
此外,如果可能的话,我希望随着用户的键入,替换的字符可以直接输入文本区域,这样翻译几乎同时进行。(我假设这将使用某种setInterval()
函数?)
如果能就我应该在javascript中使用哪些工具的正确格式提供任何提示,那将是非常出色的;提前感谢
如果您感兴趣,以下是我在本项目结束时提供的全部替代方案:
语法:(X或Y==结果)
AJ-JA=FAK KA=V
AL-LA=B
A、 ;A=Y
SJ JS=N
SK KS=M
SL LS=S
S、 ;S=P
DJ JD=A
DK=U
DL-LD=D
D、 ;D=G
FJ JF=\ubr> FK KF=I
FL LF=T
F、 ;F=K
作为SA=C
SD DS=L
DF FD=E
JK KJ=O
KL LK=R
五十、 ;L=Z
AD DA=-
SF FS=,
AF FA=。
JL LJ=!
K、 ;K=:
J、 ;J=?
-丹尼尔·雷曼(Daniel Rehman)如果可以确定某些对总是转换为同一个字符,那么字典对象可能会有所帮助
var dict = { as:"A", kl:"B", al:"C", fj:"D" ... };
而且,如果您的“解密”算法是“惰性的”(计算它遇到的第一对),那么您可以只遍历输入字符串
var outputString = "", c, cl;
for (c = 1, cl = inputString.length; c < cl; c += 2) {
outputString += dict[inputString[c-1] + inputString[c]] || "";
}
var outputString=”“,c,cl;
对于(c=1,cl=inputString.length;c
如果你的替换算法并不比简单地查找这对字母代表的字母复杂,那么这对你来说应该没问题。不需要真正的逻辑。我已经为你的要求准备了一个代码。你可以在按键下绑定一个函数,以允许在文本区域中键入时进行连续更改 我正在使用replacePair方法将一对字符替换为其等效的大写表示形式。您可以在此处插入自己的自定义逻辑
var tb = document.getElementById('tb');
var processedLength = 0;
var pairEntered=false;
tb.onkeydown = function (e) {
pairEntered=!pairEntered;
if (pairEntered) {
var nextTwoChars = this.value.substr(this.value.length - 2, 2);
var prevPart=this.value.substr(0,this.value.length-2);
var finalText=prevPart+ replacePair(nextTwoChars);
this.value=finalText;
processedLength+=2;
}
}
function replacePair(str){
return str.toUpperCase();
}
jsfiddle:
根据您的更换逻辑更新了fiddle:您不能按如下方式执行吗:
var text = document.getElementById("textbox").value;
for (i = 0; i <= text.length; i++) {
if (text[i] == "j") {
if (text[i+1] == "f") {
pair = "jf";
text = text.replace(pair, "_");
}
}
var text=document.getElementById(“textbox”).value;
对于(i=0;i我希望我之前的回答足以让您开始。我只是提供了一个算法,您可以根据自己的喜好使用(将其包装在函数中,并添加您自己的事件侦听器,等等)
这是你问题的解决办法。我没有写整本字典。你需要完成它
var字典={“aj”:“F”,“ja”:“F”,“ak”:“V”,“ka”:“V”,“al”:“B”,“la”:“B”,“a;”:“Y”,“a”:“Y”}
var输入、输出;
函数init(){
输入=document.getElementById(“输入”);
输出=document.getElementById(“输出”);
input.addEventListener(“keyup”,decrypt,false);
}
函数解密(){
如果(!输入| |!输出){
回来
}
var i=输入值,o=“”,c,cl;
对于(c=1,cl=i.长度;c
好吧,我已经成功地将这些操作嵌入到我的代码中,而且这种方法似乎确实有效!:)然而,这只是一个小问题,出于某种原因,我很难注入自己的替代品来代替您提供的toUpperCase
逻辑;您是否可以举一个类似“sl”的逻辑的例子或者“ls”=“s”适合此方法?哦!我在代码底部尝试的以下设置似乎有些效果。当我尝试按如下方式放入一个简单的replace()
函数时,function replacePair(str){return str.replace(“fj”),fj;}
它似乎可以工作……但只能每隔一次。令人困惑的是,它不会翻译每一个字符对,你知道为什么吗?另外,在我指定第一个替换后,我不能添加任何其他替换逻辑……因此有这样的情况。:/你能发布你的替换逻辑吗,我会相应地更改我的代码。是这样吗?function replacePair(str){return str.replace(“fj”,“”);}
…或者你是在寻找我最终制作的实际替代品…?嗯…我在代码中尝试了这一点,它似乎对更改文本区域没有反应,但是,不管怎样,我认为每次替换一个字符时将一个字符向右洗牌的特殊方法不会100%有效
var text = document.getElementById("textbox").value;
for (i = 0; i <= text.length; i++) {
if (text[i] == "j") {
if (text[i+1] == "f") {
pair = "jf";
text = text.replace(pair, "_");
}
}