Javascript 根据ln#和字符查找并更改字符串中的文本#
如何在文本中位于特定Ln#和character#的单词前加字符 示例:Javascript 根据ln#和字符查找并更改字符串中的文本#,javascript,jquery,regex,Javascript,Jquery,Regex,如何在文本中位于特定Ln#和character#的单词前加字符 示例: usersCode.split("\n")[lineNumber - 1].replace(usersCode.split("\n")[lineNumber - 1].substr(29, 39), MyObj.first_name.value); 用例是当一个人将代码输入到文本区域(比如JSFIDLE)时,我会找到并替换他们的一些变量。我知道这些变量的开始和结束的行和字符位置 示例文本: var usersCode =
usersCode.split("\n")[lineNumber - 1].replace(usersCode.split("\n")[lineNumber - 1].substr(29, 39), MyObj.first_name.value);
用例是当一个人将代码输入到文本区域(比如JSFIDLE)时,我会找到并替换他们的一些变量。我知道这些变量的开始和结束的行和字符位置
示例文本:
var usersCode = $('textarea').val();
控制台日志记录usersCode
:
print "My first name is: " + first_name
print "This is awesome."
print "My last name is: " + last_name
我怎样才能找到从Ln0开始,Char 29,到Ln0结束,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#,会有许多更简单的选择。如果您只是尝试替换
名字和姓氏最简单的解决方案是使用替换()
,例如:
usersCode.replace("first_name", MyObj.first_name.value);
usersCode.replace("last_name", MyObj.last_name.value);
如果你坚持要做行号和字符号特定的事情,我们可以安排,但这根本不是你想要的。也许我弄错了
更新:
usersCode.split("\n")[lineNumber - 1].replace(usersCode.split("\n")[lineNumber - 1].substr(29, 39), MyObj.first_name.value);
好的,那么您要替换所有实例吗?查找行号和所有仍然不必要的内容,只需使用以下命令:
usersCode.replace(/first_name/g, MyObj.first_name.value);
usersCode.replace(/last_name/g, MyObj.last_name.value);
g
是用于全局搜索的正则表达式标志
更新2:
usersCode.split("\n")[lineNumber - 1].replace(usersCode.split("\n")[lineNumber - 1].substr(29, 39), MyObj.first_name.value);
您可以分别用变量startChar
和endChar
替换29
和39
<代码>行号
也需要由您提供。您可以将文本区域的行保存到数组中:
var lines = $('#textarea').val().split(/\n/);
然后从那里获取特定直线的子字符串,并将其指定给对象:
MyObj.first_name.value = lines[0].substring(29,39)
希望有帮助 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)
可以有任意文本,因此可能会多次出现first\u name
。还有许多其他的复杂因素使得使用Ln和Ch成为一种要求。例如,我使用CodeMirror而不是textarea。。。这意味着有很多关于不使用更简单方法的细节。感谢更新,但不,我不想替换所有实例。我只想替换特定行和字符号处的实例。如果有任意文本,则表示您不想硬编码行和字符号。不过,客户总是对的,所以给我两秒钟时间。谢谢:)我没有硬编码行号和字符,用户在编辑器中单击变量名,作为事件处理程序,我得到变量名的Ln#和Char#。。。然后换成sxnine-谢谢你给我一次机会,我现在就试试。