Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中,如何将一个随机字母字符串划分为成对的子字符串,并连续替换为新字符?_Javascript_String_Replace_Split - Fatal编程技术网

在Javascript中,如何将一个随机字母字符串划分为成对的子字符串,并连续替换为新字符?

在Javascript中,如何将一个随机字母字符串划分为成对的子字符串,并连续替换为新字符?,javascript,string,replace,split,Javascript,String,Replace,Split,因此,我正在进行一个项目,该项目涉及通过解析特定的翻译字母对,将字符串(如“als;kdfja;lsjkdf”)转换为常规字符(如“大狗”)。(即:“fj”=“D”) 问题是,我不能简单地在javascript中使用.replace()函数,因为在很多情况下,它被赋予文本“fjkl”,需要找到“jk”,并从逻辑上解释“fj”和“kl”的冲突,以表示它找到了它。这对我来说不起作用,因为对我来说,它没有找到它,因为我只是试图一次查看两个字符内找到的对。(即:“fjkl”只能是“fj”和“kl”。)

因此,我正在进行一个项目,该项目涉及通过解析特定的翻译字母对,将字符串(如“als;kdfja;lsjkdf”)转换为常规字符(如“大狗”)。(即:“fj”=“D”)

问题是,我不能简单地在javascript中使用
.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=F
AK 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, "_");

    }
}