我正在尝试创建一个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
但是当参考出现在页面的最左侧(句子中的第一个单词)时,它不会被选中。同样地,它不会选择是否跟随完整停止或冒号前进。
有没有办法通过排除/?来专门排除网址?和=来自前一个字符,但在所有其他情况下选择?
答案 0 :(得分:1)
捕获(^
start |
或[^/?=]
negated character class之前必须不出现的内容
/(^|[^\/?=])(\bX00[A-Z0-9]{7}\b)/gi
并替换为:'$1<span class="context context_ident">$2</span>'
答案 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>');
答案 3 :(得分:0)
您无需在替换部件的结束span
标记中转义前缀。
正则表达式:
^((?:(?![\/?]).)*)(X00[A-Z0-9a-z]{7})(.*)$
替换字符串:
$1<span class="context context_ident">$2</span>$3