Javascript 通过正则表达式制作降价标题符号
我正在尝试建立一个个人降价编辑器。受库的源代码启发,我几乎完成了任务,但奇怪的是,有些代码并没有按预期工作。以下关于标题定义的部分是其中一个让我陷入麻烦的部分:Javascript 通过正则表达式制作降价标题符号,javascript,regex,replace,Javascript,Regex,Replace,我正在尝试建立一个个人降价编辑器。受库的源代码启发,我几乎完成了任务,但奇怪的是,有些代码并没有按预期工作。以下关于标题定义的部分是其中一个让我陷入麻烦的部分: 。替换(/^(#))[\t]*(.+?)[\t]*\n/gm,“$2”) 在中测试时,正则表达式似乎很好。有没有线索说明它为什么不能按预期工作?是否存在浏览器版本问题(我现在正在使用FF 36.0.1) 编辑。这是产生问题的最小示例 ` 结果 编译! 输入代码。。。 var sourceContent、resultContent; 函
。替换(/^(#))[\t]*(.+?)[\t]*\n/gm,“$2”)代码>
在中测试时,正则表达式似乎很好。有没有线索说明它为什么不能按预期工作?是否存在浏览器版本问题(我现在正在使用FF 36.0.1)
编辑。这是产生问题的最小示例
`
结果
编译!
输入代码。。。
var sourceContent、resultContent;
函数编译(){
sourceContent=document.getElementById(“source”).innerHTML;
resultContent=sourceContent.replace(/^(#))[\t]*(.+?)[\t]*\n+/gm,“$1”);
document.getElementById(“结果”).innerHTML=resultContent;
}
`由于您使用的是可编辑的div
,innerHTML
不包含新行,而是
,这就是您的正则表达式不适合的原因。您可以使用文本区域:
结果
编译!
输入代码。。。
var sourceContent、resultContent;
函数编译(){
sourceContent=document.getElementById(“source”).value;
resultContent=sourceContent.replace(/^(?:#))\s*(.+?)[\t]*$/gm,“$1”);
document.getElementById(“结果”).innerHTML=resultContent;
}
我无法让它在regex101上工作,你能发布一个示例输入的示例吗?是的,它正在工作。但是你也可以在这里使用^(\\\+)(\w+)\s+)模式,你应该提供一个@thomasayob,在regex101中添加了一个工作示例的链接,实际上我不知道regex有能力共享链接,例如,你的示例告诉我这是可能的,谢谢:)谢谢你的回复,它对我仍然不起作用。。。没有错误,只是不匹配。。。如果是浏览器不兼容,你知道一个更通用的正则表达式是否也适用于较旧的浏览器吗?我测试了答案中的代码,它给出的JS版本等于1.5,然后将firefox更新为v。奇怪的是,问题依然存在,JS版本仍然等于1.5。问题是,如果这行代码没有问题,它与我的其余代码有关,但它也不正确,就像我使用代码。替换(/(#| |))(?=\S)([^\r]*?\S)\1/g,“$2”)
一样,它工作得很好,尽管它没有达到我想要的效果。所以代码的其余部分是正确的,问题在于所使用的正则表达式。如果这有助于我生活在Linux中。我几乎要放弃了,现在我将你的代码添加到我的页面末尾,令人惊讶的是,它居然成功了(在将“\$1”修改为“\$1”后,更具体地说)!但随后再次将代码添加到用于编译标记源代码的函数中,再次失败。代码本身并没有错,因为它适用于某些正则表达式,但不适用于其他一些正则表达式。。。这不是因为浏览器和/或JS版本。。。我觉得很奇怪…非常感谢,你救了我一周!我希望我能做的不仅仅是接受你的回答。圣诞快乐:)@owari你可以:这叫做赏金;)
<!DOCTYPE html>
<html>
<body>
<div id="result" style="display:inline-block; width:45%; height:85vh; float:left; border:1px solid #555555;">Result</div>
<button type="button" onclick="compile();">Compile !</button>
<div id="source" style="display:inline-block; width:45%; height:85vh; border:1px solid #555555;" contenteditable="true">Enter Code ...</div>
<script>
var sourceContent, resultContent;
function compile(){
sourceContent=document.getElementById("source").innerHTML;
resultContent=sourceContent.replace(/^(#)[ \t]*(.+?)[ \t]*\n+/gm,"<h1>$1</h1>");
document.getElementById("result").innerHTML=resultContent;
}
</script>
</body>
</html>
<!--
tested with:
#title 1
ok
# title 2
ok
# title 3 #
ok
-->