Javascript 从多行文本区域中提取两个单词
在创建主题页面上,我有一个文本区域,部分由代码填充。Javascript 从多行文本区域中提取两个单词,javascript,Javascript,在创建主题页面上,我有一个文本区域,部分由代码填充。机密标记之间的所有内容都由此代码添加 There is some text in the message! [confidential] {sitedetails} Site URL: example.com Site Username: test Site Password: test FTP URL: ftp.domain.com FTP Username: test FTP Password: test Optional Inf
机密
标记之间的所有内容都由此代码添加
There is some text in the message!
[confidential]
{sitedetails}
Site URL: example.com
Site Username: test
Site Password: test
FTP URL: ftp.domain.com
FTP Username: test
FTP Password: test
Optional Information: Just some text for testing purposes!
{/sitedetails}
[/confidential]
在同一页面上,此代码运行:
var $editor = $(".markItUpEditor");
var curValue = $editor.val();
var sdCheck = curValue;
var sdAnalyze = /{sitedetails}([\S\s]*?){\/sitedetails}/gm
var newSD = sdCheck.replace(sdAnalyze,"{sitedetails}\n\n" + inputValues + "\n\n{/sitedetails}");
//alert(newSD);
$editor.val(newSD);
这基本上用新的站点详细信息替换站点详细信息。inputValues
在此不可见,但它们包含站点详细信息并正在工作
通过更改此行,还可以轻松修改上述代码以删除站点详细信息:
var newSD = sdCheck.replace(sdAnalyze,"{sitedetails}\n\n" + inputValues + "\n\n{/sitedetails}");
到
但是如何修改代码以保留{sitedetails}
和{/sitedetails}
之间的所有内容呢
这应返回:
Site URL: example.com
Site Username: test
Site Password: test
FTP URL: ftp.domain.com
FTP Username: test
FTP Password: test
Optional Information: Just some text for testing purposes!
example.com
如果可能的话,我怎样才能更进一步,只在站点URL:
和站点用户名:
这应返回:
Site URL: example.com
Site Username: test
Site Password: test
FTP URL: ftp.domain.com
FTP Username: test
FTP Password: test
Optional Information: Just some text for testing purposes!
example.com
好吧,据我所知,我可能是错的,您希望提取给定字符串上Site URL:和Site Username:之间的所有内容,并可能将其存储到变量中,然后您可以通过以下方式从字符串中提取:
sdCheck.split(/(Site URL:|Site Username:)/g)[Math.round((sdCheck.split(/(Site URL:|Site Username:)/g).length - 1) / 2)].trim();
这样你就可以得到它。在那里所做的是:
var textarea=document.getElementById('textarea');
提取();
函数提取(){
var text=textarea.value;
document.getElementById('result').innerHTML=text.split(/(站点URL:|站点用户名:)/g)[Math.round((text.split(/(站点URL:|站点用户名:)/g).length-1)/2].trim();
}
textarea.addEventListener('keyup',function(){
提取();
});代码>
消息中有一些文字!
[机密]
{sitedetails}
网站URL:example.com
站点用户名:test
站点密码:test
FTP URL:FTP.domain.com
FTP用户名:测试
FTP密码:测试
可选信息:只是一些用于测试目的的文本!
{/sitedetails}
[/机密]
好吧,据我所知,我可能是错的,您希望提取给定字符串上Site URL:和Site Username:之间的所有内容,并可能将其存储到变量中,然后您可以通过以下方式从字符串中提取:
sdCheck.split(/(Site URL:|Site Username:)/g)[Math.round((sdCheck.split(/(Site URL:|Site Username:)/g).length - 1) / 2)].trim();
这样你就可以得到它。在那里所做的是:
使用正则表达式拆分数组中的字符串。这样,您将始终获得奇数长度数组
使用Math.round和division选择数组的中间位置
删除空白的修剪
此逻辑仅在字符串中只有一个Site URL:和Site Username:匹配时才起作用,但它可以在其他情况下转换
片段:
var textarea=document.getElementById('textarea');
提取();
函数提取(){
var text=textarea.value;
document.getElementById('result').innerHTML=text.split(/(站点URL:|站点用户名:)/g)[Math.round((text.split(/(站点URL:|站点用户名:)/g).length-1)/2].trim();
}
textarea.addEventListener('keyup',function(){
提取();
});代码>
消息中有一些文字!
[机密]
{sitedetails}
网站URL:example.com
站点用户名:test
站点密码:test
FTP URL:FTP.domain.com
FTP用户名:测试
FTP密码:测试
可选信息:只是一些用于测试目的的文本!
{/sitedetails}
[/机密]
像这样
var re=/{sitedetails}([\S\S]*?){\/sitedetails}/gm,
urlRe=/Site URL:(.*)\n/
var str=$(“.editor”).val(),newStr=re.exec(str);
newStr=newStr?newStr[1]。trim():“”;
console.log(newStr)
if(newStr){
var url=newStr.match(urlRe);
如果(url)url=url[1].trim();
日志(“URL:,URL”)
}
消息中有一些文字!
[机密]
{sitedetails}
网站URL:example.com
站点用户名:test
站点密码:test
FTP URL:FTP.domain.com
FTP用户名:测试
FTP密码:测试
可选信息:只是一些用于测试目的的文本!
{/sitedetails}
[/机密]
像这样
var re=/{sitedetails}([\S\S]*?){\/sitedetails}/gm,
urlRe=/Site URL:(.*)\n/
var str=$(“.editor”).val(),newStr=re.exec(str);
newStr=newStr?newStr[1]。trim():“”;
console.log(newStr)
if(newStr){
var url=newStr.match(urlRe);
如果(url)url=url[1].trim();
日志(“URL:,URL”)
}
消息中有一些文字!
[机密]
{sitedetails}
网站URL:example.com
站点用户名:test
站点密码:test
FTP URL:FTP.domain.com
FTP用户名:测试
FTP密码:测试
可选信息:只是一些用于测试目的的文本!
{/sitedetails}
[/机密]
出于好奇,这些都是键/值对。为什么不使用一个简单的对象而不是所有(非常昂贵的)字符串解析来填充textarea呢?或者,至少考虑字符串模板文字。@ RangyCasBuy我正在修改我们的网页上现有的扩展,而实际上没有触摸核心文件。因此,我创建了一个新选项卡,用于创建包含输入的主题页面。现在,通常这些输入会通过扩展名添加,但我不知道核心文件,所以它们必须添加到文本区域。我给出的第一个代码是如何在输入新的详细信息时更新textarea。说到你说的:使用一个简单的对象
我能举个例子吗?因为我不明白你的意思。这可能就是我做字符串解析的原因。看来我不明白你的困境。你说:机密标签之间的所有内容都是由该代码添加的。-如果是这样的话,在代码中,您拥有实现目标所需的一切。但我的经验是,如果人们更喜欢正则表达式,他们会不遗余力地确保解决方案是正则表达式。我认为我不能在这里增加价值。出于好奇,这些都是关键/价值