如何判断复制的内容是来自word文档还是浏览器网页?
How to find whether the copied content is from word or text document or browser web page?
我需要根据复制内容的位置处理我的代码中粘贴的内容。如果内容是从word中复制过来的,那么我需要做一些功能。以同样的方式,当内容从文本文档和浏览器内容复制时必须调用另一个函数。我们将通过剪贴板数据获取 html 内容。
- 为了检查它是否是从word中复制的,我使用了正则表达式
/class="?Mso|style="[^ ]*\bmso-/i
。
但这里的问题是,虽然部分内容是从word中复制的,但它没有class Mso,只有样式mso。在某些情况下,它只有 Mso class 名称而没有样式。即使条件具有 OR ,当任何一个 Mso 出现在 html 内容中时,正则表达式也会失败。所以我需要检查 html 内容是否是从 word 中复制的,这两种情况都有一个通用的正则表达式。
- 需要一个正则表达式来检查html复制的内容是来自文本文档还是浏览器网页。
用于检查从 word 复制的内容的正则表达式。
RegExp= /class="?Mso|style="[^ ]*\bmso-/i
从浏览器网页复制时,我得到以下 HTML 格式。
<html>
<body>
<!--StartFragment--><span style="box-sizing: border-box; color: rgb(17, 17, 17); font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: 0.25px; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial; font-family: "Segoe UI", sans-serif;">We have checked the sample </span><!--EndFragment-->
</body>
</html>
然而,从文本文档复制的文本将是没有正文标签或片段的纯文本 HTML。我需要从浏览器页面中删除 html 内容的这些开始和结束片段。
我需要一个正则表达式来检查内容是从文本文档还是浏览器网页复制的。
您想保留两个标签 <!--StartFragment-->
和 <!--EndFragment-->
之间的所有文本。
虽然你可以使用
s = s.replace(/<!--StartFragment-->([\s\S]*?)<!--EndFragment-->/g, '');
我建议打开惰性点模式并使用更高效的模式,例如:
s = s.replace(/<!--StartFragment-->([^<]*(?:<(?!!--(?:Start|End)Fragment-->)[^<]*)*)<!--EndFragment-->/g, '');
非嵌套的 <!--StartFragment-->
和 <!--EndFragment-->
将被删除,它们之间的所有内容都将放回结果字符串中。
第 1 组 (</code>) 模式是 <code>[^<]*(?:<(?!!--(?:Start|End)Fragment-->)[^<]*)*
:
[^<]*
- <
以外的 0 个或更多字符
(?:<(?!!--(?:Start|End)Fragment-->)[^<]*)*
- 出现 0 次或多次:
<(?!!--(?:Start|End)Fragment-->)
- <
后面没有 !--
,Start
或 End
,然后是 Fragment-->
[^<]*
- <
以外的 0 个或更多字符
我需要根据复制内容的位置处理我的代码中粘贴的内容。如果内容是从word中复制过来的,那么我需要做一些功能。以同样的方式,当内容从文本文档和浏览器内容复制时必须调用另一个函数。我们将通过剪贴板数据获取 html 内容。
- 为了检查它是否是从word中复制的,我使用了正则表达式
/class="?Mso|style="[^ ]*\bmso-/i
。
但这里的问题是,虽然部分内容是从word中复制的,但它没有class Mso,只有样式mso。在某些情况下,它只有 Mso class 名称而没有样式。即使条件具有 OR ,当任何一个 Mso 出现在 html 内容中时,正则表达式也会失败。所以我需要检查 html 内容是否是从 word 中复制的,这两种情况都有一个通用的正则表达式。
- 需要一个正则表达式来检查html复制的内容是来自文本文档还是浏览器网页。
用于检查从 word 复制的内容的正则表达式。
RegExp= /class="?Mso|style="[^ ]*\bmso-/i
从浏览器网页复制时,我得到以下 HTML 格式。
<html>
<body>
<!--StartFragment--><span style="box-sizing: border-box; color: rgb(17, 17, 17); font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: 0.25px; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial; font-family: "Segoe UI", sans-serif;">We have checked the sample </span><!--EndFragment-->
</body>
</html>
然而,从文本文档复制的文本将是没有正文标签或片段的纯文本 HTML。我需要从浏览器页面中删除 html 内容的这些开始和结束片段。
我需要一个正则表达式来检查内容是从文本文档还是浏览器网页复制的。
您想保留两个标签 <!--StartFragment-->
和 <!--EndFragment-->
之间的所有文本。
虽然你可以使用
s = s.replace(/<!--StartFragment-->([\s\S]*?)<!--EndFragment-->/g, '');
我建议打开惰性点模式并使用更高效的模式,例如:
s = s.replace(/<!--StartFragment-->([^<]*(?:<(?!!--(?:Start|End)Fragment-->)[^<]*)*)<!--EndFragment-->/g, '');
非嵌套的 <!--StartFragment-->
和 <!--EndFragment-->
将被删除,它们之间的所有内容都将放回结果字符串中。
第 1 组 (</code>) 模式是 <code>[^<]*(?:<(?!!--(?:Start|End)Fragment-->)[^<]*)*
:
[^<]*
-<
以外的 0 个或更多字符
(?:<(?!!--(?:Start|End)Fragment-->)[^<]*)*
- 出现 0 次或多次:<(?!!--(?:Start|End)Fragment-->)
-<
后面没有!--
,Start
或End
,然后是Fragment-->
[^<]*
-<
以外的 0 个或更多字符