测试Regex是否存在某个角色

问题描述 投票:1回答:2

我有一些我想要匹配的字符串

  1. Cafe Team会员:Grovedale(精选)
  2. Cafe Team会员:Barwon Heads(精选)
  3. Cafe Team会员:Barwon Heads

我能够想出的是/(?<=\:\s)(.+)(?=\s\()/g,它将适用于选项一和二,但是3(因为我在位置后寻找一个开放式支架)它将无法工作。我很难过我还能怎么做。

Where i have been testing

编辑:

我需要添加的所有内容都是|$所以它现在看起来像/(?<=\:\s)(.+)(?=\s\(|$)/g但是在codepen中测试它时仍然没有正确捕获字符串。 regexr说它应该工作的地方。

// vue stuff
new Vue({
    el: "#app",
    data: {
        titles: [
          "Cafe Team Member: Grovedale (Featured)",
          "Cafe Team Member: Barwon Heads (Featured)",
          "Cafe Team Member: Barwon Heads",
        ]
    }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
  <template v-for="title in titles">
    <p>{{ title.match(/(?<=\:\s)(.+)(?=\s\(|$)/g) }}</p>
  </template>
</div>
regex vue.js
2个回答
1
投票

尝试使用此正则表达式:

(?<=:\s)[^(\r\n]+

Click for Demo

说明:

  • (?<=:\s) - 积极的lookbehind匹配位置紧接着一个:后跟一个白色空间
  • [^(\r\n]+ - 匹配任何字符的1 +次出现,既不是(也不是换行符。这将确保匹配所有字符,直到在同一行中找到(。如果找不到(,则匹配到行尾。

1
投票

你的正则表达式不匹配只是因为.+必须跟随?,它匹配的次数尽可能少。没有它,(.+)将匹配到行尾,你的积极前瞻将无法匹配任何东西。

// vue stuff
new Vue({
    el: "#app",
    data: {
        titles: [
          "Cafe Team Member: Grovedale (Featured)",
          "Cafe Team Member: Barwon Heads (Featured)",
          "Cafe Team Member: Barwon Heads",
        ]
    }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
  <template v-for="title in titles">
    <p>{{ title.match(/(?<=\:\s)(.+?)(?=\s\(|$)/g) }}</p>
  </template>
</div>
© www.soinside.com 2019 - 2024. All rights reserved.