具有多个必须相同的开始和结束字符的正则表达式

时间:2016-08-26 07:49:44

标签: javascript regex string

我希望能够在JavaScript中的字符串中搜索特殊标记内的字符串。 JavaScript中的字符串可以以"'字符开头。

这里有一个例子来说明我想做什么。我的自定义标记名为<my-tag。我的正则表达式是/('|")*?<my-tag>((.|\n)[^"']*?)<\/my-tag>*?('|")/g。我在以下字符串上使用此正则表达式模式:

var a = '<my-tag>Hello World</my-tag>'; //is found as expected
var b = "<my-tag>Hello World" + '</my-tag>'; //is NOT found, this is good!
var c = "<my-tag>Hello World</my-tag>"; //is found as expected
var d = '<my-tag>something "special"</my-tag>'; //here the " char causes a problem
var e = "<my-tag>something 'special'</my-tag>"; //here the " char causes a problem

适用于 a 以及 c ,它会找到包含文本的标记。它也找不到 b 中的文字,这就是我想要的。但是,如果 d e ,由于"'字符的出现,找不到包含内容的标记。我想要的是正则表达式,如果字符串以"开头,则允许在标记'内,反之亦然。

是否可以通过一个正则表达式来实现这一点,或者我唯一能做的就是使用两个单独的正则表达式 /(")*?<my-tag>((.|\n)[^']*?)<\/my-tag>*?(")/g/(')*?<my-tag>((.|\n)[^"]*?)<\/my-tag>*?(')/g

2 个答案:

答案 0 :(得分:1)

它并不漂亮,但我认为这样可行:

/("<my-tag>((.|\n)[^"]*?)<\/my-tag>"|'<my-tag>((.|\n)[^']*?)<\/my-tag>')/g

答案 1 :(得分:-1)

您应该可以在第一场比赛中使用de match(&#39; |&#34;)并将其重复用于第二场比赛。如下所示:

/('|")<my-tag>.*?<\/my-tag>\1/g

这应该确保在开头和结尾匹配相同的字符。

但你真的不应该使用正则表达式来解析HTML。