相当简单的 HTML(省略号表示还有更多代码):
...Profile">
Some text
</a>...
使用 JavaScript 的在线 RegEx 测试器 (http://regexpal.com/),我可以使用以下表达式提取“某些文本”(注意它包含换行符):
(?=Profile">)[\s\S]*(?=</a)
(不幸的是,JavaScript 不支持后向查找,因此我还提取了 Something"> 以便稍后删除它。但是,问题是下面的代码
var ShowContent = document.getElementById(id);
ShowContent = ShowContent.innerHTML;
var patt3=/Profile">[\s\S]*(?=<)/;
var GetName=patt3.exec(ShowContent);
alert(GetName);
不会提取在线测试程序显示的内容,但它还包含“Some text”之后的整个 HTML 代码(即,不仅是结尾 < /a
,还包括之后的所有内容)。
有人有什么建议吗?
最佳答案
当您确定提供的字符串不包含可能的陷阱时(例如 <input value='Profile">'>
,请将 [\s\S]*
替换为 [^<]*
(除 <
之外的任何内容):
var patt3 = /Profile">([^<]*)/;
var getName = patt3.exec(ShowContent);
getName = getName ? getName[1] : ''; // If no match has been found -> empty string
alert(getName);
(我还将 GetName
替换为 getName
,因为以大写字母开头的驼峰式变量通常表示构造函数。请遵守约定,不要以大写字母开头非构造函数)。
关于javascript - RegEx 与 JavaScript 的匹配程度超出了应有的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10165280/