【问题标题】:Regex to match strings that begin with specific word and after that words seperated by slashes正则表达式匹配以特定单词开头和之后由斜杠分隔的单词的字符串
【发布时间】:2014-08-04 05:36:44
【问题描述】:

所以我想用正则表达式匹配表单的所有字符串

(word1|word2|word3)/some/more/text/..unlimited parts.../more

所以它以特定单词开头,不以 / 结尾

要匹配的示例:

word1/ok/ready
word2/hello
word3/ok/ok/ok/ready

我最终想要的是当我有一个包含以上 3 个示例的文本(以随机文本散布)时,我在执行 regex.exec(text); 后收到一个包含这 3 个匹配项的数组;

有人知道如何开始吗? 谢谢!

【问题讨论】:

  • @AndyLester 是对的。这里有一些提示:[^/] 匹配除斜线以外的任何内容; + 表示匹配上一项或多项。
  • 我明白..我确实尝试过,我能够匹配前缀但不能匹配其他前缀:)
  • 向我们展示您尝试过的实际代码,然后描述发生的情况和不正确的地方,然后我们可以从那里帮助您。

标签: regex prefix slash


【解决方案1】:

这样的事情应该可以工作:

^(word1|word2|word3)(/\w+)+$

如果您在需要用斜杠分隔正则表达式的环境中使用它,那么您需要转义内斜杠:

/^(word1|word2|word3)(\/\w+)+$/

编辑

如果您不想捕获第二部分,请将其设为非捕获组:

/^(word1|word2|word3)(?:\/\w+)+$/
                      ^^ Add those two characters

认为这就是你想要的,但谁知道呢:

var input = '';
input += 'here is a potential match word1/ok/ready that is followed by another ';
input += 'one word2/hello and finally the last one word3/ok/ok/ok/ready';

var regex = /(word1|word2|word3)(\/\w+)+/g;
var results = []

while ((result = regex.exec(input)) !== null) {
    results.push(result[0].split('/'));
}

console.log(results);

【讨论】:

  • 谢谢!虽然我没有按预期工作,但如果我这样做 /^(word1|word2|word3)(\/\w+)+$/.exec("word1/ok/ok"),那么我会得到 ["word1/ok/ ok", "word1", "/ok"] 而我应该只得到第一个 :) 任何想法如何解决?
  • 谢谢我添加 ?: to word1 现在它工作正常
  • 它只匹配一个事件很好,但实际上我想要做的是使用该正则表达式来查找文本中的所有匹配项。我已经更新了我的问题,请看一下
  • 对不起,我的意图不够清楚。请再看看。我知道我需要删除 ^ 和 $,但后来我被卡住了..
猜你喜欢
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
  • 2023-01-20
  • 1970-01-01
  • 1970-01-01
  • 2017-09-12
  • 2015-06-24
  • 1970-01-01
相关资源
最近更新 更多