正则表达式排除URL

时间:2014-09-06 09:48:59

标签: javascript regex

我正在尝试创建一个JavaScript程序,用链接替换某些文本模式。但是,由于页面上的URL中存在某些模式,因此它会阻止URL链接。

我特意想要排除模式,如果它包含在URL中,例如这里是我当前的正则表达式代码。

$els.replaceText(/(\bX00[A-Z0-9]{7}\b)/gi, '<span class="context context_ident">$1<\/span>');

一些示例文字:

  

item: X00132BhJk

     

www.domain.com/X00132BhJk

     

www.domainsearch.com/search?ident=X00132BhJk

     

X00132BhJk

     

X00132BhJk

应选择并替换斜体引用,但域中包含的引用不应该。我一直有的问题是参考时。

最初我尝试\sX00[A-Z0-9]{7}\s但是当参考出现在页面的最左侧(句子中的第一个单词)时,它不会被选中。同样地,它不会选择是否跟随完整停止或冒号前进。

有没有办法通过排除/?来专门排除网址?和=来自前一个字符,但在所有其他情况下选择?

4 个答案:

答案 0 :(得分:1)

捕获(^ start |[^/?=] negated character class之前必须不出现的内容

/(^|[^\/?=])(\bX00[A-Z0-9]{7}\b)/gi

并替换为:'$1<span class="context context_ident">$2</span>'

see fiddle; SO Regex FAQ;

答案 1 :(得分:0)

(?!^www.*?X00[A-Z0-9]{7}.*$)^(.*?)(X00[A-Z0-9]{7})(.*)$

试试这个。

替换为。

\1<span class="context context_ident">$1<\/span>\2

参见演示。

http://regex101.com/r/oC3nN4/7

为多行匹配添加了一个m标志,因为我使用了锚点。

答案 2 :(得分:0)

您可以尝试使用非捕获括号(?:),在您的情况下(?:[^/?=]|^)

replace(/(?:[^/?=]|^)(\bX00[A-Z0-9]{7}\b)/gi, '<span class="context context_ident">$1<\/span>');

Example

答案 3 :(得分:0)

您无需在替换部件的结束span标记中转义前缀。

正则表达式:

^((?:(?![\/?]).)*)(X00[A-Z0-9a-z]{7})(.*)$

替换字符串:

$1<span class="context context_ident">$2</span>$3

DEMO