在javascript中使用regexp查找并删除字符串中的子字符串

时间:2012-11-22 12:58:29

标签: javascript regex

在Javascript或ruby中,我需要使用正则表达式查找子字符串并将其从我的主字符串中删除,该主字符串可能包含多个子字符串。

我的主要字符串是

 My <style type="">first</style> name <style>is</style> xyz <style>abc</style>.

我需要删除样式标记中的所有文本,包括样式标记。

我尝试过以下表达式和其他几种变体

(<style .*>[^<>]*?<\/style>)
(<style .*>[^<>]*<\/style>)

我想要的结果字符串是

My name xyz.

但我找不到正确的方法。我得到的是

<style type="">first</style> name <style>is</style> xyz <style>abc</style>

正确的正则表达式是什么?

注意:不能使用任何JS库,如jquery和其他。

4 个答案:

答案 0 :(得分:1)

这应该这样做:

str = 'My <style type="">first</style> name <style>is</style> xyz <style>abc</style>.';
str = str.replace("<style[^>]*?>.*?</style>","");

答案 1 :(得分:0)

'My <style type="">first</style> name <style>is</style> xyz <style>abc</style>.'
.replace(/<style[^>]*>[^<]*<\/style>/g,'');
"My  name  xyz ."

但实际上你正试图用正则表达式解析xml,这实际上是不可能的。

答案 2 :(得分:0)

您还可以使用DOM解析来删除不需要的节点。

var el = document.createElement('div');
el.innerHTML = 'My <style type="">first</style> name <style>is</style> xyz <style>abc</style>.';
var styles = el.getElementsByTagName('style');
for(var i = styles.length - 1; i >= 0; i--){
    console.log(styles);
    el.removeChild(styles[i]);
}
el.innerHTML; // My name xyz

答案 3 :(得分:0)

你可以试试这个

[<\/][a-z]+[a-z][ ][a-z]+[=]["]["][>]|[<][\/][a-z]+[>]|[<][a-z]+[>]

click here for output