繁体   English   中英

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

[英]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

它可以很好地与ac一起使用 ,在其中可以找到包含文本的标签。 它也找不到我想要的b中的文本。 但是在de的情况下,由于出现了"'字符而找不到带有内容的标签。我要的是一个正则表达式,如果字符串以'开头,则允许在标签"内,反之亦然。

是否可以使用一个正则表达式来实现,或者我唯一能做的就是使用两个单独的正则表达式,例如/(")*?<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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM