繁体   English   中英

如何获取字符串中指定重复字符的位置?

[英]How to get the position of a specified repeated character in a string?

假设我有这个字符串:

test (string) (10)

如何获得第三个括号(第二个开头)的位置?

这个:

在此处输入图片说明

PS 在实际情况下,我不控制括号内有多少个字符,所以我不能只是向后计算它们以获得位置。 无论第三个括号在哪里,我都需要它的索引。

使用匹配到第三个括号的所有内容的正则表达式,然后获取其长度。

 str = 'test (string) (10)'; match = str.match(/^[^(]*\\([^)]*\\)[^(]*\\(/); if (match) { console.log(match[0].length-1); }

最简单的方法绝对不是最高效的方法。

如果性能不是问题,我个人会使用split

var chunks = "test (string) (10)".split("(")

pos = chunks[0].length + chunks[1].length

您可能需要在上面的公式中加 1 或类似的东西。 我没有时间把它弄好;)

使用 indexOf 两次,首先获取第一个右括号的位置,然后获取下一个左括号的位置:

 let s = 'test (string) (10)' let position = s.indexOf('(', s.indexOf(')')) console.log(position)

请注意,位置将从零开始,如有必要,请加 1。

如果字符串仅包含与右括号匹配的左括号,则可以使用带有否定字符类\\([^()]*\\)的正则表达式匹配括号之间的除()之外的任何字符。

然后获取第二个匹配项的索引(如果存在):

 const s = "test (string) (10)"; const result = [...s.matchAll(/\\([^()]*\\)/g)]; if (undefined !== result[1]) { console.log(result[1].index); }

如果可以有任何不成对的括号,并且您只想匹配第三个(假设支持使用后视):

 const s = "test (string) (10)"; const result = [...s.matchAll(/[()]/g)]; if (undefined !== result[2]) { console.log(result[2].index); }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM