- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试替换所有出现的 ???some.text.and.dots???在 html 页面上添加链接。我已经构建了这个执行它的正则表达式:
\?\?\?([a-z0-9.]*)\?\?\?
但是,我想排除链接内的任何结果:“ ... MY PATTERN ... ”,我对如何做有点困惑那,我所有的尝试现在都失败了。
最佳答案
目前还不清楚您正在处理哪种“HTML”。如果它是 HTML 代码,可能来自 Ajax 请求,那么您可以使用正则表达式;匹配链接 或 模式,然后计算出在回调中要做什么:
var html = document.body.innerHTML;
html = html.replace(/(<a\s.*?>.*?<\/a>)|(\?\?\?([a-z0-9.]*)\?\?\?)/g,
function ( a, b, c, d ) {
return ( a[0] == '<' ) ? a : '<a href="#">' + d + '</a>';
});
context.innerHTML = html;
方便地,replace()
can take a callback function作为替代生成器而不是简单的字符串。
但是,如果您正在处理动态 DOM 树,您可能希望尊重节点上的事件,而不是简单地重置 innerHTML
。为此,您需要更原始的方法:
// returns all childnodes of type text that do not have A as parent
function walker ( node ) {
var nodes = [];
for (var c, i = 0; c = node.childNodes[i]; i++) {
if ( c.nodeType === 1 && c.tagName !== 'A' ) {
nodes = nodes.concat( arguments.callee( c ) );
}
else if ( c.nodeType === 3 ) {
nodes.push( c );
}
}
return nodes;
}
var textNodes = walker( document.body );
for (var i = 0; i < textNodes.length; i++) {
// create an array of strings separating the pattern
var m = textNodes[i].nodeValue.split( /(\?\?\?([a-z0-9.]*)\?\?\?)/ );
if ( m.length > 1 ) {
for (var j=0; j<m.length; j++) {
var t, parent = textNodes[i].parentNode;
// create a link for any occurence of the pattern
if ( /^\?\?\?([a-z0-9.]*)\?\?\?$/.test( m[j] ) ) {
var a = document.createElement( 'a' );
a.href = "#";
a.innerHTML = RegExp.$1; // m[j] if you don't want to crop the ???'s
parent.insertBefore( a, textNodes[i] );
t = document.createTextNode( ' ' ); // whitespace padding
}
else {
t = document.createTextNode( m[j] );
}
parent.insertBefore( t, textNodes[i] );
}
// remove original text node
parent.removeChild( textNodes[i] );
}
}
此方法仅触及文本节点,然后仅触及与模式匹配的文本节点。
关于Javascript Regexp - 匹配字符串模式,除非字符串在指定标签内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/321947/
我对这里的区别是什么以及为什么一个有效而另一个无效感到困惑。谁能解释一下? //The string to search through var str = "This is a string /*
我很困惑这里有什么区别以及为什么一个有效而另一个无效。有人能解释一下吗? //The string to search through var str = "This is a string /* w
概述 RegExp 的构造函数创建了一个正则表达式对象,用模式来匹配文本。 有关正则表达式介绍,请阅读JavaScript指南中的正则表达式章节。 语法 文字和构造符号是可能的: /patt
在我的数据库中,我有一个公司表。该表有一个名为 tags 的字段,其中包含以下内容: Furniture Retail E-commerce B2C Home & Furniture Consumer
var str='The_Andy_Griffith_Show'; // string to perform replace on var regExp1=/\s|[A-Z]/g; var reg
我正在为 VBA 编写一个脚本,用于 Outlook 2013,它使用正则表达式,我发现的每个示例似乎都使用 Set regex = New RegExp创建一个 RegExp 对象。当我尝试这个时,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
在“How do I removing URLs from text?”中建议使用以下代码: require 'uri' #... schemes_regex = /^(?:#{ URI.scheme
所以我有一个 RegExp regex =/asd/ 我将它作为 key 存储在我的键值对存储系统中。 所以我说 str = String(regex) 返回 "/asd/"。 现在我需要将该字符串转
谁能提供一些例子来解释 regexp.Compile 之间的区别?和 regexp.CompilePOSIX ?我阅读了文档。但是我无法得到直观的理解。 最佳答案 Perl 和 POSIX 兼容的正则
我目前正在学习 SQL 并使用 SSMS 2017。我不明白为什么在使用 REGEXP 语法时出现错误,它似乎适用于其他任何人: SELECT * FROM List WHERE Name REGEX
我有一个包含文本的 emacs 缓冲区 a1b2c3 使用正则表达式构建器,我创建了正则表达式 "b\\(2\\)" 并且可以看到匹配突出显示(b2,2 的颜色不同)。 但是,当我将表达式粘贴到 re
这个问题已经有答案了: JavaScript: using constructor without operator 'new' (2 个回答) 已关闭 7 年前。 RegExp('hi') 和有什么
我的正则表达式是这样的: ((?:[a-z][a-z0-9_]*)).*?(\d+).*?((?:[a-z][a-z0-9_]*)).*?(\d+).*?([a-z]) 如果我将其作为 MySQL R
我对基准测试和功能感兴趣?是否有理由使用 Jakarta 正则表达式? 最佳答案 似乎没有什么理由。但是除了 Jakarta 图书馆之外,还有其他一些有趣的图书馆。此链接提供了一些有关性能和 perl
如果声明了 SPEC Env,我将尝试有条件地加载我的测试: var context = null if (process.env.SPEC) { context = require.contex
我尝试为 emacs 编写一些新的对齐规则,但发现这种奇怪且不一致的行为。当前缓冲区内容: "some thing" like => this hello => world and => aga
这个问题在这里已经有了答案: Is gcc 4.8 or earlier buggy about regular expressions? (3 个答案) 关闭 8 年前。 我尝试使用 C++11
我遇到了两个错误,都与编码有关并且都相关。 我在启动 WEBrick 时遇到的第一个错误(技术上是警告): /Users/USERNAME/example/config/initializers/bb
我有一个 almost-json文件。估计1000 行。这是其中的一部分: level: { 1: { cost: 200,
我是一名优秀的程序员,十分优秀!