在单个单词中插入文本。独特的环境

时间:2013-07-17 00:54:17

标签: javascript jquery

我有一个非常奇怪的开箱即用的问题,但这是有充分理由的。

如果我有一个变量,例如:

var myText = "Select an option, and we'll update you.";

我需要将其更改为:

"Se~lect an option, and we'll up~date you.";

现在符号无关紧要。我只需要对数据库相关的单词使用任何类型的特殊字符。选择,更新,计数等。但我也想选择一个典型的人在打字时不常使用的角色。

我希望有一种方法可以将这些字符插入到指定字词列表中,如果它们存在于变量中。

过程:

用户以在变量中捕获val()的形式输入注释。 然后取变量并在这些单词中插入一个特殊字符。

在SQL级别上,我在使用replace解析这些字符之前将它们插入到数据库中。

非常感谢你......

2 个答案:

答案 0 :(得分:0)

如果您绝对不能修复此问题,您可以将注释编码为JSON并用其unicode转义序列表示每个字符:

function unicode_stringify(s) {
    var result = [];

    for (var i = 0; i < s.length; i++) {
        result.push('\\u' + ('0000' + s.charCodeAt(i).toString(16)).slice(-4));
    }

    return '"' + result.join('') + '"';
}

在您的服务器上对其进行解码,它应该可以正常工作:

> unicode_stringify('SELECT * FROM comments')
""\u0053\u0045\u004c\u0045\u0043\u0054\u0020\u002a\u0020\u0046\u0052\u004f\u004d\u0020\u0063\u006f\u006d\u006d\u0065\u006e\u0074\u0073""
> JSON.parse(unicode_stringify('SELECT * FROM comments'))
"SELECT * FROM comments"

请仅将此作为最后手段使用。

答案 1 :(得分:0)

也许这样的事情应该给你一个开始(如果你真的必须)。

的Javascript

var words = ["select", "update", "count"];

function modify(text) {
    words.forEach(function (word) {
        text = text.replace(new RegExp("\\b" + word + "\\b", "gi"), function(match) {
            var insertAt = Math.floor(match.length / 2);

            return match.slice(0, insertAt) + "~" + match.slice(insertAt);
        });
    });

    return text;
}

console.log(modify("Select an option, and we'll update you. Count. Select an option, and we'll update you."));

输出

Sel~ect an option, and we'll upd~ate you. Co~unt. Sel~ect an option, and we'll upd~ate you.

jsfiddle

更新优化

的Javascript

var words = ["select", "update", "count"],
    regexs = words.map(function (word) {
        return new RegExp("\\b" + word + "\\b", "gi");
    });

function modify(text) {
    regexs.forEach(function (regex) {
        text = text.replace(regex, function (match) {
            var insertAt = Math.floor(match.length / 2);

            return match.slice(0, insertAt) + "~" + match.slice(insertAt);
        });
    });

    return text;
}

console.log(modify("Select an option, and we'll update you. Count. Select an option, and we'll update you."));

jsfiddle