javascript - 创建一个 javascript 正则表达式来查找以 # 开头的数字(但不包括 HTML 特殊字符或现有链接)

标签 javascript regex

我正在尝试从某些字符串创建链接。我试过这个:

([^&]#)([0-9]+)(?![^<>]*>)

但它并不能正常工作。

Test 1: &#106
Test 2: #1040
Test 3: some text followed by #1060
Test 4: <a href="#1060">#1060</a>
Test 5: <b>#1078</b> (...or any other tag except <a>)
  • 测试 14:不应匹配
  • 测试 235:应该匹配

即它应该匹配任何标记中的 #number,链接标记(也不是它的属性)除外。

这是一个 jsfiddle,您可以在其中对其进行测试:http://jsfiddle.net/xqnjs2uq/3/

有问题的正则表达式被标记为“regex3”,我在其中包含了另外两个正则表达式,因为它们是全局的一部分——只是为了能够检查这个正则表达式是否会干扰其中的任何一个。

更新 在@chsdk 的帮助下,我设法找到了一种方法来使用两个正则表达式(请参阅以下 jsfiddle 中的 regex3 和 regex4)...

http://jsfiddle.net/xqnjs2uq/6/

/[^&|href="]+(#[0-9]+\b)/gim  --> matches Test 3 and 5 above
/^(#[0-9]+)/   --> required to match Test 2 above

一等奖是将其压缩成一个正则表达式。这可能吗?

最佳答案

只需使用以下正则表达式 /[^&|href="](#[0-9]+)/g .

这是 a live DEMO ,给出这些结果:

enter image description here

与以下比赛:

enter image description here

编辑:

我错过了你想避免在链接中匹配这个表达式的部分,这是你需要的正则表达式:

[^&|"](#[0-9]+\b)(?!<\/a>)

我们添加了 \b在这里确保它在单词边界处采用整个表达式并且 (?!<\/a>)以避免匹配链接。

这是 the Live DEMO 再次,您可以在以下代码段中对其进行测试:

var re = /[^&|"](#[0-9]+\b)(?!<\/a>)/g;
var str = 'Test 1: &#106\nTest 2: #1040\nTest 3: some text followed by #1060\nTest 4: <a href="#1060">#1060</a>\nTest 5: <b>#1078</b> (...or any other tag except <a>)';
var m;

while ((m = re.exec(str)) !== null) {
  if (m.index === re.lastIndex) {
    re.lastIndex++;
  }
  document.write("<b>" + m[1] + "</b><br/>");
}

关于javascript - 创建一个 javascript 正则表达式来查找以 # 开头的数字(但不包括 HTML 特殊字符或现有链接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32370140/

相关文章:

javascript - 如何从 ASP 隐藏值调用 javascript 函数?

javascript - 用自定义路径和 rexep 替换 css 中的相关链接

javascript - 正则表达式在单词之间只允许一个空格

regex - .htaccess 文件行为异常且无法使用小写字母

regex - Google Analytics 在自定义报告中排除空的自定义变量

javascript - 如何重置已设置为禁用以重新启动游戏的可拖动对象?

javascript - 根据按钮的处理程序条件进行指导

javascript - 在 dojo 中显示 Json 数据

javascript - 对于函数 (function($){})(),我看到它里面有 jQuery 这个词,这是为什么呢?

java - RegEx - Java Split 命令解析 Csv 文件