技术解析

请教一个正则上出现的很奇怪的问题
0
2021-08-19 10:29:12
idczone

最近在重写博客的模板系统,然后就给写爆了,还找不到原因,这里是 html 部分:
https://pastebin.com/YJyu6QZx
我想获得{(PostContent)}和{(PostContentEnd)}之间的内容,首先用了不动脑子的 split 方法,结果截到 html 中的"2019-06-09 这个地方就停了,顿时就惊讶了,改模板系统之前没出过这种问题。随后我换成了正则匹配:

xxx.match(/\{\(PostContent\)\}(.*?){\(PostContentEnd\)\}/)

然而 match 出来的还是到 2019-06-09 这里就没了...
因为要实现压缩,发布博文时我替换段落的所有空格、换行符等为{{s}},{{rn}},{{n}},我想着可能是这个影响了。随后用没有这种替换符的去匹配就成功了... 但是按理来说这一类字符不会对正则造成影响吧,为何截到 06-09 这里就停了...有什么处理方法?


没仔细看你的题目
会不会是正则没有加 g /xxx/g

加 g 的话好似没法匹配,主要问题是匹配了,但是匹配出来的东西少了一小节

我试了一下可以成功匹配出来
```
`文本`.match(/\{\(PostContent\)\}(.*?){\(PostContentEnd\)\}/)
```
贴合代码?

…,原来你自己题目都说了删了换行符号就好了
.小数点是匹配除换行符以外的字符,所以其实去掉换行符就好了
或者 /((.|\n)*?)/

我抽出来了一段,底下用的是自己简单写的函数
https://pastebin.com/C9hbKXby
这个匹配就有问题

你的 HTML 里这样写:

那么它就不是 div 标签了,它也无法和
配对。
浏览器认为你这个 HTML 写错了,自动帮你重新构造了 XML 树,你通过审查元素就能看到:
https://image.sneezry.com/cauici3e4k5w.png
你把 document.getElementsByTagName('html')[0].innerHTML 输出到控制台,看看浏览器帮你改成什么样了。

感谢提示,我用转义解决了^_^

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服