我有一些我想要匹配的字符串
我能够想出的是/(?<=\:\s)(.+)(?=\s\()/g
,它将适用于选项一和二,但是3(因为我在位置后寻找一个开放式支架)它将无法工作。我很难过我还能怎么做。
编辑:
我需要添加的所有内容都是|$
所以它现在看起来像/(?<=\:\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>
尝试使用此正则表达式:
(?<=:\s)[^(\r\n]+
说明:
(?<=:\s)
- 积极的lookbehind匹配位置紧接着一个:
后跟一个白色空间[^(\r\n]+
- 匹配任何字符的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>