不包含字符的字符串的JavaScript匹配

时间:2019-12-09 01:47:10

标签: javascript regex

我正在尝试使用Javascript匹配包含一个目录的URL模式,并带有可选的斜杠。

例如

这应该匹配:

  

文本和http://twitter.com/path及更多文本

这不应该匹配:

  

文本和http://twitter.com/path /其他/目录以及更多文本

即使较短的字符串存在于较长的字符串中,我也不希望较长的字符串返回任何内容。

这可能吗?


这是我到目前为止尝试过的:

方法是匹配网址,然后使用否定字符类或否定回溯

我尝试了以下操作:

/(https?:)?(\/\/)?(www\.)?twitter\.com\/[a-z0-9_+-]+\/?(?![a-z0-9_+-])/ig

这是为了查找具有\w+路径,带有可选的斜杠(而不是其他\w+)的Twitter URL。

虽然这不包含第二个目录,但我希望它根本不匹配字符串。

/(https?:)?(\/\/)?(www\.)?twitter\.com\/\w+[^\/\w]*/ig

这是为了查找URL,但不包括斜杠和后面的\w。与以前的尝试类似,它仍然匹配长链接。

我已经尝试过这样的变体,但无法使其起作用:

var regex1 = /(https?:)?(\/\/)?(www\.)?twitter\.com\/\w+(?!\/\w+)/ig;

var regex2 = /(https?:)?(\/\/)?(www\.)?twitter\.com\/\w+[^\/\w]*/ig;

var shouldMatch = 'text https://twitter.com/page text';
var shouldNotMatch = 'text https://twitter.com/page/status/123 text';

console.log('regex1 should match', shouldMatch.match(regex1));

console.log('regex1 should return []', shouldNotMatch.match(regex1));

console.log('regex2 should match', shouldMatch.match(regex2));

console.log('regex2 should return []', shouldNotMatch.match(regex2));

2 个答案:

答案 0 :(得分:1)

您可以在有效部分的末尾使用否定的前瞻,断言页面名称后没有Vue.component('checkbox-wrapper',{ template: "#checkbox-wrapper" }); var app1 = new Vue({ el: "#app1", data: {}, methods: {} }); 和单词字符或其他单词字符。在负向前瞻中添加其他单词字符替代可以防止正则表达式在其他情况下与<!DOCTYPE html> <html> <head> <title>Empty project</title> <meta charset="utf-8"> <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.10/vue.js"></script> <script src="checkbox-wrapper.js"></script> </head> <body> <div id="app1"> <checkbox-wrapper></checkbox-wrapper> </div> <script src="app1.js"></script> </body> </html> 相匹配。

/

答案 1 :(得分:1)

我会用肯定的前瞻来断言在最后一组\w+之后是空格字符或字符串的结尾。

(?:https?:\/\/)?(?:www\.)?twitter\.com\/\w+(?=\s|$)

演示:https://regex101.com/r/EMHxq9/3

我还使用了非捕获组来代替捕获组,因为看起来好像您没有回引用任何东西,并且组合了可选的“ https:”和“ //”部分,因为这样做很奇怪一个而不是另一个。