在创建主题页面上,我有一个文本区域,该区域部分由代码填充。 confidential
标记之间的所有内容均由该代码添加。
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}");
到
var newSD = sdCheck.replace(sdAnalyze,"");
但是我如何修改代码以保留{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!
如果可能的话,我该如何走得更远,只保持在Site URL:
和Site Username:
之间
这应该返回:
example.com
答案 0 :(得分:2)
好吧,据我所知,我可能错了,您想要提取给定字符串上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和除法选择数组的中间位置。
修剪以删除空格。
仅当字符串中只有一个“站点URL:”和“站点用户名:”匹配时,此逻辑才起作用,但是可以在其他情况下进行转换。
摘要:
var textarea = document.getElementById('textarea');
extract();
function extract() {
var text = textarea.value;
document.getElementById('result').innerHTML = text.split(/(Site URL:|Site Username:)/g)[Math.round((text.split(/(Site URL:|Site Username:)/g).length - 1) / 2)].trim();
}
textarea.addEventListener('keyup', function() {
extract();
});
<textarea id="textarea" style="height: 200px; display: inline-block">
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]
</textarea>
<div id="result" style="display: inline-block; vertical-align: top">
</div>
答案 1 :(得分:2)
赞
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);
if (url) url = url[1].trim();
console.log("URL:",url)
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<textarea class="editor" rows="10">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]</textarea>