[英]Regex with multiple start and end characters that must be the same
我希望能够在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
?
它不是很漂亮,但是我认为这可以工作:
/("<my-tag>((.|\n)[^"]*?)<\/my-tag>"|'<my-tag>((.|\n)[^']*?)<\/my-tag>')/g
您应该能够使用第一个匹配项('|“)中的de match并将其重用于第二个匹配项。类似于以下内容:
/('|")<my-tag>.*?<\/my-tag>\1/g
这应该确保在开头和结尾匹配相同的字符。
但是,您实际上不应该使用正则表达式来解析HTML。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.