我希望能够在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
?
答案 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。