如何将字符前置到位于特定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#,我知道许多更简单的替代方案。
答案 0 :(得分:1)
您可以将textarea的行保存到数组中:
var lines = $('#textarea').val().split(/\n/);
然后从那里获取特定行的子字符串并将其分配给您的对象:
MyObj.first_name.value = lines[0].substring(29,39)
希望有所帮助!
答案 1 :(得分:0)
如果您只是尝试替换first_name
和last_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);
您可以分别用变量29
和39
替换startChar
和endChar
。 lineNumber
也需要由您提供。
答案 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)