正则表达式将Javascript中的字符串拆分为多个字符串的逻辑

正则表达式将Javascript中的字符串拆分为多个字符串的逻辑,javascript,regex,string,split,Javascript,Regex,String,Split,很难把所有的东西都放在问题的标题中,因为它的具体程度取决于人们想要拆分的字符串。但这是: 我有一个字符串,其中有多个脚本标记: <script type="text/javascript" src="/javascripts/something-1.js"></script> <script type="text/javascript" src="/javascripts/something-2.js"/> <script type="text/java

很难把所有的东西都放在问题的标题中,因为它的具体程度取决于人们想要拆分的字符串。但这是:

我有一个字符串,其中有多个脚本标记:

<script type="text/javascript" src="/javascripts/something-1.js"></script>
<script type="text/javascript" src="/javascripts/something-2.js"/>
<script type="text/javascript" src="/javascripts/something-3.js"></script>
<link rel="stylesheet" type="text/css" href="/something-1.css">
作为一个字符串-而不是两个

如何使用regex,例如:

/<script.*src=( (not script not link) /> | (not link) <\/script> )/g

将。*更改为。*?尽可能少地匹配,而不是尽可能多地匹配。

另一种处理方法是使用xmldom将src用作脚本标记的属性,并将页面作为部分或完整的xml文档。这是一种积极的方式,可以抓住它们并避免链接。

我会使用类似的方法

var rx = /<script.+?src=.+?\/(script)?>/gim;
这将匹配任何内容:

以或/脚本开头> 还有国旗

i标志表示不区分大小写 g标志用于多个匹配项 m标志用于多行源,假设这些行实际上是行本身,而不是总共一行
编辑:我没有考虑在src属性的值中的地址中有一个get值,如&src=etc。

一般来说,您试图做的是不可能的。但是,如果可以对源字符串进行某些简化假设,就可以创建一个足够好的正则表达式。以下是我将尝试的:

/<script(?:\s+\w+\s*=\s*"[^"]*")+\s*/?>(?:</script>)?/gi
说明:


m标志是不相关的。只有在使用锚定“^”和$匹配行的开头和结尾时才重要。请原谅我的无知,这是一个严肃的问题,但是如果结束标记位于下一行,例如,该怎么办?省略m标志还会让它被捕获吗?在这种情况下,您的正则表达式将失败,因为。不匹配换行符,并且多行模式不会改变这一点。它所做的只是更改^和$的行为,允许它们在行边界以及整个字符串的开头和结尾进行匹配。经常重复的建议如果源字符串是多行的,则必须使用多行模式是错误的。您可能正在考虑单线模式或DOTALL模式,这将启用。匹配任何字符,但JavaScript不支持。
var rx = /<script.+?src=.+?\/(script)?>/gim;
/<script(?:\s+\w+\s*=\s*"[^"]*")+\s*/?>(?:</script>)?/gi