根据ln#和字符#查找和更改字符串中的文本

时间:2014-07-11 23:39:43

标签: javascript jquery regex

如何将字符前置到位于特定Ln#和字符#中的单词?

示例:

用例是当一个人将代码输入textarea(如jsFiddle)时,我会找到并替换他们的一些变量。我知道这些变量的起点和终点的行#和字符位置。

示例文字:

var usersCode = $('textarea').val();

控制台记录usersCode

print "My first name is: " + first_name
print "This is awesome."
print "My last name is: " + last_name

我怎样才能找到从Ln 0,Char 29开始到Ln 0,Char 39(first_name)结束并将其变为MyObj.first_name.value的单词?

print "My first name is: " + MyObj.first_name.value
print "This is awesome."
print "My last name is: " + last_name

也许我可以使用正则表达式将“行号”转换为计算\n次出现次数?然后将指针移入字符数?

我必须使用Ln#和Char#来获取我不会在这里讨论的许多细节。如果我不局限于使用Ln#和Ch#,我知道许多更简单的替代方案。

3 个答案:

答案 0 :(得分:1)

您可以将textarea的行保存到数组中:

var lines = $('#textarea').val().split(/\n/);

然后从那里获取特定行的子字符串并将其分配给您的对象:

MyObj.first_name.value = lines[0].substring(29,39)

希望有所帮助!

答案 1 :(得分:0)

如果您只是尝试替换first_namelast_name,最简单的解决方案就是使用replace(),例如:

usersCode.replace("first_name", MyObj.first_name.value);
usersCode.replace("last_name", MyObj.last_name.value);

如果您坚持使用行号和字符号特定的东西,我们可以安排,但它根本不是您所要求的内容所必需的。也许我错了。

<强>更新

好的,你想要替换所有实例吗?找到行号以及所有这些仍然是不必要的,只需使用:

usersCode.replace(/first_name/g, MyObj.first_name.value);
usersCode.replace(/last_name/g, MyObj.last_name.value);

g是全局搜索的RegEx标志。

更新2:

usersCode.split("\n")[lineNumber - 1].replace(usersCode.split("\n")[lineNumber - 1].substr(29, 39), MyObj.first_name.value);

您可以分别用变量2939替换startCharendCharlineNumber也需要由您提供。

答案 2 :(得分:0)

RegEx可以根据字符轻松搜索,但不能通过位置搜索。虽然你仍然可以使用regEx来做,但灵魂会变得越来越复杂。对于这种情况,你不需要一个纯粹的RegEx答案。以下代码是您所需要的。

k=$('#regex_string').val()

function findAndReplaceWord(lineNo, startPos, endPos, replaceWith) {
    var line = k.split(/\n/)[lineNo];
    if(line) {
        var word = line.substring(startPos, endPos)

        return k.replace(word, replaceWith)
    }
}

findAndReplaceWord(0, 29, 39, MyObj.first_name.value)