Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.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_Jquery_Regex_String - Fatal编程技术网

使用JavaScript正则表达式将字母替换为单词

使用JavaScript正则表达式将字母替换为单词,javascript,jquery,regex,string,Javascript,Jquery,Regex,String,我正在做一些需要语音表达的东西。目标是获取一个随机字符串(包含数字、字母和符号),并用单词替换字母。我遇到了一个问题 它不希望将第一个和最后一个字母更改为单词。这是因为表达式/\sa\s/g(例如)搜索字母前后有空格的小写a的所有实例 假设您有一个随机字符串h_OX%o2At 下面的代码返回h\uoscar XRAY%OSCAR 2 ALPHA t,但我希望它返回hotel\uoscar XRAY%OSCAR 2 ALPHA tango 代码如下: phoneticExp.text(passwo

我正在做一些需要语音表达的东西。目标是获取一个随机字符串(包含数字、字母和符号),并用单词替换字母。我遇到了一个问题

它不希望将第一个和最后一个字母更改为单词。这是因为表达式
/\sa\s/g
(例如)搜索字母前后有空格的小写
a
的所有实例

假设您有一个随机字符串
h_OX%o2At

下面的代码返回
h\uoscar XRAY%OSCAR 2 ALPHA t
,但我希望它返回
hotel\uoscar XRAY%OSCAR 2 ALPHA tango

代码如下:

phoneticExp.text(password.split("").join(" ").replace(/\sa\s/g, " alpha ").replace(/\sA\s/g, " ALPHA ").replace(/\sb\s/g, " bravo ").replace(/\sB\s/g, " BRAVO ").replace(/\sc\s/g, " charlie ").replace(/\sC\s/g, " CHARLIE ").replace(/\sd\s/g, " delta ").replace(/\sD\s/g, " DELTA ").replace(/\se\s/g, " echo ").replace(/\sE\s/g, " ECHO ").replace(/\sf\s/g, " foxtrot ").replace(/\sF\s/g, " FOXTROT ").replace(/\sg\s/g, " golf ").replace(/\sG\s/g, " GOLF ").replace(/\sh\s/g, " hotel ").replace(/\sH\s/g, " HOTEL ").replace(/\si\s/g, " india ").replace(/\sI\s/g, " INDIA ").replace(/\sj\s/g, " juliet ").replace(/\sJ\s/g, " JULIET ").replace(/\sk\s/g, " kilo ").replace(/\sK\s/g, " KILO ").replace(/\sl\s/g, " lima ").replace(/\sL\s/g, " LIMA ").replace(/\sm\s/g, " mike ").replace(/\sM\s/g, " MIKE ").replace(/\sn\s/g, " november ").replace(/\sN\s/g, " NOVEMBER ").replace(/\so\s/g, " oscar ").replace(/\sO\s/g, " OSCAR ").replace(/\sp\s/g, " papa ").replace(/\sP\s/g, " PAPA ").replace(/\sq\s/g, " quebec ").replace(/\sQ\s/g, " QUEBEC ").replace(/\sr\s/g, " romeo ").replace(/\sR\s/g, " ROMEO ").replace(/\ss\s/g, " sierra ").replace(/\sS\s/g, " SIERRA ").replace(/\st\s/g, " tango ").replace(/\sT\s/g, " TANGO ").replace(/\su\s/g, " uniform ").replace(/\sU\s/g, " UNIFORM ").replace(/\sv\s/g, " victor ").replace(/\sV\s/g, " VICTOR ").replace(/\sw\s/g, " wiskey ").replace(/\sW\s/g, " WISKEY ").replace(/\sx\s/g, " xray ").replace(/\sX\s/g, " XRAY ").replace(/\sy\s/g, " yankee ").replace(/\sz\s/g, " zulu ").replace(/\sZ\s/g, " ZULU "));
然后我试着做
/(\s |\s?)a(\s |\s?)/g
,应该搜索小写的
a
,它的前后都有空格或可选空格。那没用


我不知所措。以下是您还需要搜索字符串开头和结尾处的锚点的

。对于每个字符,您需要执行以下操作:
/(\s|^)a(\a|$)/g
。我可能还会对开始/结束字符进行散列并循环,这样您就不需要在某些地方进行这些更改了


我在这里对h和t做了相应的修改,例如:

不要查找被空格包围的字母,而是尝试查找单词边界。例如

.replace(/\bh\b/g, "hotel")

为什么不避免使用正则表达式,而改为这样做呢

Javascript

var lookup = {
    a: 'alpha',
    b: 'bravo',
    c: 'charlie',
    d: 'delta',
    e: 'echo',
    f: 'foxtrot',
    g: 'golf',
    h: 'hotel',
    i: 'india',
    j: 'juliet',
    k: 'kilo',
    l: 'lima',
    m: 'mike',
    n: 'november',
    o: 'oscar',
    p: 'papa',
    q: 'quebec',
    r: 'romeo',
    s: 'siera',
    t: 'tango',
    u: 'uniform',
    v: 'victor',
    w: 'wiskey',
    x: 'xray',
    y: 'yankee',
    z: 'zulu',
};

function toPhonetic(text) {
    return text.split('').map(function (character) {
        var lower = character.toLowerCase(),
            word;

        if (lookup.hasOwnProperty(lower)) {
            word = lookup[lower];
            if (character === lower) {
                return word;
            }

            return word.toUpperCase();

        }

        return character;
    }).join(' ');
}

var password = $("#password").text(),
    phoneticExp = $("#phonetic");

phoneticExp.text(toPhonetic(password));