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();

这样你就可以得到它。在那里所做的是:

  • 使用正则表达式拆分数组中的字符串。这样,您将始终获得奇数长度数组

  • 使用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}
    [/机密]
    
    好吧,据我所知,我可能是错的,您希望提取给定字符串上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。说到你说的:
    使用一个简单的对象
    我能举个例子吗?因为我不明白你的意思。这可能就是我做字符串解析的原因。看来我不明白你的困境。你说:机密标签之间的所有内容都是由该代码添加的。-如果是这样的话,在代码中,您拥有实现目标所需的一切。但我的经验是,如果人们更喜欢正则表达式,他们会不遗余力地确保解决方案是正则表达式。我认为我不能在这里增加价值。出于好奇,这些都是关键/价值