用于查找 10 或 100,1000 的正则表达式不起作用

regex expression to find 10 or 100,1000...doesn't work

提问人:Linh Chi 提问时间:9/17/2023 更新时间:9/17/2023 访问量:48

问:

我创建了正则表达式 /(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>

JavaScript HTML 正则表达式 数字 匹配

评论


答:

1赞 Nick 9/17/2023 #1

您的问题是将匹配字符串中的所有 , , , ,并且由于这是交替中的第一个元素,因此正则表达式引擎在匹配时停止(因此最长的匹配是 )。你可以通过交换交替来解决这个问题,这样最长的匹配是第一个:10?110100100010

<!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*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*/g);
document.getElementById("demo").innerHTML = result;
</script>

</body>
</html>

请注意,这些正则表达式也将匹配 或 。如果您不想这样做,请在正则表达式的两端添加一个(单词边界)。见下文21125107\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