1

在两个标记之间捕获字符串的最短解决方案是什么?

例如,假设我有

blahblahblah --- foobar-- blahblahblah

我想捕捉“foobar”。

我可以使用正则表达式轻松捕获字符串“---foobar--”。

但是由于我不想要前缀“---”和后缀“--”,我需要很多步骤来清理结果:

  1. 获取前缀“---”的位置(因为我们已经捕获了这个块,所以我们知道位置是 0)
  2. 获取“---”的长度(为了示例,假设我们不知道限制器的大小,它可以是“---”或“--”或“-”)
  3. 获取后缀“--”的位置,从位置 position_prefix+prefix_length 开始
  4. position_prefix+prefix_length 和 position_suffix 之间的子字符串

当然,如果我需要的话,我可以自己构建一个这样的功能来做到这一点,但是是否已经有内置的解决方案呢?

类似 captureWithoutDelimiters(group_regex, prefix_regex, suffix_regex) 的东西?

4

2 回答 2

3

怎么样:

[\w\s]+-+(\w+)-+[\w\s]+

然后您可以打印出第一个捕获组捕获的内容。

解释:

[\w\s]+     // Match at lest 1 letter or white space character
-+          // Followed by at least 1 marker character
(\w+)       // Capture the word inside the markers
-+          // Followed by more marker characters
[\w\s]+     // Followed by at lest 1 letter/white space character
于 2012-11-08T13:50:09.397 回答
1

最短的解决方案可能是

.split("-+")[1]

如果您需要---作为前缀和--后缀,并且您允许-文本中的任何位置,那么拆分解决方案是

.split("---")[1].split("--")[0]

请参阅此演示

于 2012-11-08T14:26:17.287 回答