我的文字看起来像这样:
1. Must have experience in Java 2. Team leader...
我想在HTML中将其呈现为有序列表。现在将</li>
标记添加到最后很简单:
s = replace(s, ". ", "</li>");
但是如何用1.
替换2.
,<li>
等?
我有正则表达式\d*\.$
,它匹配带句点的数字,但问题是这是一个子字符串,因此匹配1. Must have experience in Java 2. Team leader
和\d*\.$
会返回false
。
答案 0 :(得分:3)
\d+\.\s+(.*?)\s*(?=\d+\.\s+|$)
替换
<li>$1</li>\n
- 必须具备Java 2的团队经验......
醇>
<li>Must have experience in Java</li>
<li>Team leader...</li>
\d+
匹配一个或多个数字\.
字面匹配点字符.
\s+
匹配一个或多个空白字符(.*?)
任意次数捕获任何字符,但尽可能少捕获到捕获组1 \s*
匹配任意数量的空白字符(?=\d+\.\s+|$)
肯定前瞻,确保以下任何一项都不匹配
\d+\.\s+
\d+
匹配一个或多个数字\.
字面匹配点字符.
\s+
匹配一个或多个空白字符$
断言行尾的位置答案 1 :(得分:2)
但如何用
1.
替换2.
,<li>
等?
您可以使用String#replaceAll
来支持正则表达式而不是替换:
s = s.replaceAll("\\d+\\.\\s", "</li>");
注意
$
。.
,因为它表示正则表达式中的任何字符\s
用于一个空格,或\s*
用于零个或多个空格,或者\ s +用于一个或多个空格答案 2 :(得分:0)
我们想要
s = s.replaceAll("(?s)(\\d+\\.)\\s+(.*\\.)\\s*", "<li>$2</li></ol>");
s = s.replaceFirst("<li>", "<ol><li>");
s = s.replaceAll("(?s)</li></ol><li>", "</li>\n<li>");
这可以这样做:
</li></ol>
诀窍是首先添加</ol>
一个假的(?s)
,它应该只保留在最后一个列表项之后。
.
是DOTALL表示法,导致<h3 id="change">to change</h3>
<input id="age" type="number"/>
<button onclick="change()">change</button>
<script>
function change() {
var age = document.getElementById("age").value;
//make a computation
parseInt(age) + 1
document.getElementById("change").innerHTML = "hello" + age
}
</script>
也匹配换行符。
如果有多个编号列表,则不会这样做。此外,它假设每个列表项只有一个句子。