我创建了正则表达式/(10?|10{2,})/g求1,10或100,1000.但是下面的代码没有返回预期的结果。我不知道我哪里做错了,请帮帮我!
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Regular Expressions</h2>
<p>Do a global search for a "1", followed by zero or one "0" characters:</p>
<p id="demo"></p>
<script>
let text = "1, 10, 100 or 1000?";
let result = text.match(/(10?|10{2,})/g);
//should return 1,10,100,1000 but instead return 1,10,10,10
document.getElementById("demo").innerHTML = result;
</script>
</body>
</html>
2条答案
按热度按时间k2arahey1#
我会补充。
搜索子字符串:
输出量:
仅在模式上搜索单词:
输出量:
仅搜索模式1和更多零的单词:
输出量:
查找以1个或多个零结尾的单词:
输出量:
查找仅以1个或多个零结尾的单词:
输出量:
z9ju0rcb2#
问题是
10?
将匹配字符串中的所有1
、10
、100
、1000
,由于这是交替中的第一个元素,正则表达式引擎在匹配时停止(因此最长匹配是10
)。你可以通过交换交替来解决这个问题,这样最长的匹配是第一个:但更好的是,只需将正则表达式简化为
10*
(1
后跟0个或多个0
s):请注意,这些正则表达式也将匹配
21
、12
或5107
。如果你不想这样做,在正则表达式的两端添加一个\b
(单词边界)。见下文还要注意的是,在正则表达式中不需要捕获组
(...)
,因为你只对整个匹配感兴趣。