提问人:Linh Chi 提问时间:9/17/2023 更新时间:9/17/2023 访问量:48
用于查找 10 或 100,1000 的正则表达式不起作用
regex expression to find 10 or 100,1000...doesn't work
问:
我创建了正则表达式 /(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>
答:
1赞
Nick
9/17/2023
#1
您的问题是将匹配字符串中的所有 , , , ,并且由于这是交替中的第一个元素,因此正则表达式引擎在匹配时停止(因此最长的匹配是 )。你可以通过交换交替来解决这个问题,这样最长的匹配是第一个:10?
1
10
100
1000
10
<!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{2,}|10?/g);
document.getElementById("demo").innerHTML = result;
</script>
</body>
</html>
但更好的是,只需将正则表达式简化为 ( 后跟 0 或更多 s):10*
1
0
<!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*/g);
document.getElementById("demo").innerHTML = result;
</script>
</body>
</html>
请注意,这些正则表达式也将匹配 或 。如果您不想这样做,请在正则表达式的两端添加一个(单词边界)。见下文21
12
5107
\b
<!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? But what about 12, 21 and 5107?";
let result = text.match(/\b10*\b/g);
document.getElementById("demo").innerHTML = result;
</script>
</body>
</html>
另请注意,您的正则表达式中不需要捕获组,因为您只对整个匹配感兴趣。(...)
评论
0赞
Nick
9/17/2023
@LinhChi不用担心,我希望它有用。请参阅我的编辑,其中谈到了不匹配另一个数字中间的 a。1
1赞
Сергей Александрович Лядов
9/17/2023
#2
我会补充。
搜索子字符串:
let text = "1, 10, 100 or 1000 (3100, 10000, 1000000)?";
let result = text.match(/10{1,3}/g);
输出:
10,100,1000,100,1000,1000
仅搜索模式上的字词:
let text = "1, 10, 100 or 1000 (3100, 10000, 1000000)?";
let result = text.match(/\b10{1,3}\b/g);
输出:
10,100,1000
仅在模式 1 和多个零上搜索单词:
let text = "1, 10, 100 or 1000 (3100, 10000, 1000000)?";
let result = text.match(/\b10{1,}\b/g);
输出:
10,100,1000,10000,1000000
查找以 1 个或多个零模式结尾的单词:
let text = "1, 10, 100 or 1000 (3100, 10000, 1000000)?";
let result = text.match(/\b\w*10{1,}\b/g);
输出:
10,100,1000,3100,10000,1000000
查找仅以 1 个或多个零的模式结尾的单词:
let text = "1, 10, 100 or 1000 (3100, 10000, 1000000)?";
let result = text.match(/\b\w+10{1,}\b/g);
输出:
3100
评论