javascript字符串分割中的正则表达式,浏览器兼容性问题

2024-03-21

我一直在调查这个问题,随着我深入研究,这个问题似乎只会变得更糟。

我开始天真地尝试使用这个表达式来分割 HTML 'br' 标签上的字符串:

T = captions.innerHTML.split(/<br.*?>/g);

这适用于每个浏览器(FF、Safari、Chrome),除了 IE7 和 IE8,输入文本示例如下:

is invariably subjective. <br /> 
The less frequently used warnings (Probably/Possibly) <br /> 

请注意,示例文本在“/”之前和新行之前包含一个空格。

以下两项都将匹配每个浏览器中的所有 HTML 标记:

T = captions.innerHTML.split(/<.*?>/g);
T = captions.innerHTML.split(/<.+?>/g);

然而,令人惊讶的是(至少对我来说)does not在 FF 和 Chrome 中工作:

T = captions.innerHTML.split(/<br.+?>/g);

Edit:

这(在下面的回复中多次建议)在 IE 7 或 8 上不起作用:

T = captions.innerHTML.split(/<br[^>]*>/g);

(它确实可以在 Chrome 和 FF 上运行。)

我的问题是:有谁知道适用于所有当前浏览器的表达式来匹配上面的“br”标签(但不适用于其他 HTML 标签)。任何人都可以确认上面的最后一个示例应该是有效的匹配,因为示例文本中“>”之前存在两个字符。

PS - 我的文档类型是 HTML 过渡性的。

Edit:

我想我有证据表明这是特定于 IE 上的 string.split() 行为,而不是一般的正则表达式。你必须使用 split() 才能看到这个问题。我还发现了一个测试矩阵,当我在 IE 上运行 split() 测试用例时,它的失败率约为 30%。同样的测试在 FF 和 Chrome 上通过了 100%:

http://stevenlevithan.com/demo/split.cfm http://stevenlevithan.com/demo/split.cfm

到目前为止,我仍然没有找到针对 IE 的解决方案,并且该测试矩阵的作者提供的库也没有修复这种情况。


您的代码无法正常工作的原因是,当您通过innerHTML 读取HTML 时,IE 会解析HTML 并将标签变为大写。例如,如果您有这样的 HTML:

<div id='box'>
Hello<br>
World
</div>

然后你使用这个 Javascript(在 IE 中):

alert(document.getElementById('box').innerHTML);

您将收到一个警告框:

Hello<BR>World

注意<BR>现在是大写。要解决此问题,只需添加i标志除了g标志使正则表达式不区分大小写,它将按您的预期工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javascript字符串分割中的正则表达式,浏览器兼容性问题 的相关文章

  • 执行页面的 javascript 后保存页面的 html 输出

    我正在尝试抓取一个网站 它首先加载 html js 使用js修改表单输入字段 然后使用POST 如何获得 POSTed 页面的最终 html 输出 我尝试使用 phantomjs 执行此操作 但它似乎只有渲染图像文件的选项 谷歌搜索表明这应
  • 如何使用 sed 仅删除双空行?

    我找到了这个问题和答案 https stackoverflow com questions 4651591 howto use sed to remove only triple empty lines关于如何删除三重空行 但是 我只需要对
  • 将组件注册到现有的 Vue.js 实例

    我是 Vue js 新手 我想注册一个本地组件 如下所述 https v2 vuejs org v2 guide components html Local Registration https v2 vuejs org v2 guide
  • Amcharts 图表 - 图表列到自定义 URL 的超链接以在新选项卡/窗口中打开

    我正在尝试制作一个 amcharts 图表 其中的列链接到自定义网址 并希望网址在新选项卡 窗口中打开 我尝试将此代码添加到图形对象中 但它不起作用 它在同一选项卡 窗口中打开链接 listeners event clickItem met
  • 如何在下拉列表中选择一个选项

    我正在使用 AngularJS 指令 我需要在模板中设置下拉列表的选定选项
  • IE8 和 9 上的 socket.io 问题

    Socket io 在除 IE8 和 9 之外的所有平台上都能完美运行 这是客户端要求 你们能帮忙解决这个问题吗 我一直在阅读所有类似的问题 但到目前为止我发现的大多数解决方案都无法解决 IE8 上的这个问题 这是结构 服务器端 var i
  • 如何在 javascript 或 jquery 中按尺寸对图像进行排序

    如何在 JavaScript 或 jQuery 中按尺寸对图像进行排序 我的代码如下 var imgsrc if document images length lt 1 alert No images to open return for
  • 模型不是 AngularJS 中输入的日期对象

    使用 AngularJS 我试图使用输入显示日期type date
  • FormData 中的 Blob 为 null

    我正在尝试通过远程 API 通过 ajax 在 android 中发送创建的照片 我在用着相机图片背景 https github com an rahulpandey cordova plugin camerapicturebackgrou
  • Famo.us 滚动视图高度

    我正在尝试使用著名的顺序布局在滚动视图下方添加图像 但滚动视图的高度有问题 这就是我创建滚动视图的方式 var scrollview new Scrollview direction Utility Direction X options
  • 属性访问器(getter)的扩展运算符问题

    我很难理解为什么以下代码存在一些问题https jsfiddle net q4w6e3n3 3 https jsfiddle net q4w6e3n3 3 Note 所有示例均在 chrome 版本 52 0 2743 116 中进行测试
  • jspm / jQuery / TypeScript - 模块“jquery”没有默认导出

    我正在尝试使用 TypeScript 和 jspm system js 来引导 Web 应用程序进行模块加载 我还没有走多远 安装 jspm 后 并使用它来安装 jQuery jspm install jquery 以及基础知识 main
  • 很奇怪!调用 window.location 或 location.replace 会重定向到该页面,然后再次返回!

    我处于调试模式 因此我可以看到正在访问哪个页面 当我打电话时window location or window location replace 它会转到该页面 然后返回原始页面 怎么会这样 解决方案是添加 window location
  • 更改特定字符串的颜色

    有谁知道如果将特定单词输入文本区域 我如何更改它的颜色 例如 如果用户输入 你好我的朋友 它会动态地将 你好 更改为绿色 在google上花了很多时间 找不到任何相关的东西 谢谢 textareas 的设计目的不是选择性着色
  • 如何上传文件 - sails.js

    我可以下载图像和 pdf 但无法下载文档文件 doc pptx odt 下载文档 doc pptx odt 时 仅将其下载为 ZIP XML 文件 我可以做什么 我在用着 填写上传文件文档 https github com balderda
  • Promise 构造函数回调的主体何时执行?

    假设我有以下代码构造一个Promise function doSomethingAsynchronous return new Promise resolve gt const result doSomeWork setTimeout gt
  • d3力定向布局-链接距离优先

    在 d3 中使用力导向布局 如何使链接距离成为优先事项 同时仍然保持良好的图形布局 如果我指定动态链接距离 但保留默认费用 则我的图形距离会因费用函数而发生一些变形 并且不再是准确的距离 但是 如果我删除电荷 图表将如下所示 任何建议表示赞
  • 如何仅突出显示嵌套表的最里面的表行?

    我有几个嵌套表 我想突出显示鼠标指针下方的最里面的行 我怎样才能做到这一点 一些提示 我使用嵌套表来显示递归表格数据 表可以嵌套 10 层 嵌套正如您所期望的那样 table tr td table tr td table tr td 可能
  • 获取 byte[]

    我有一个 html 画布 如下所示 output is a base64string of image data var oldImage new Image oldImage onload function var resizeRatio
  • R闪亮:使用闪亮的JS从数据表中获取信息

    我想读出所有列名称以及它们在数据表中显示的顺序 由于不同的原因 我无法使用 stateSave 等选项 我对 JS 没有什么把握 但我确信用它可以完成 所以我需要你帮助我 我尝试过类似的代码片段 datatable data callbac

随机推荐

  • 在 Android 中选择 EGL 配置的正确方法是什么?

    我正在使用自己的 GLSurfaceView 并且一段时间以来一直在努力解决与 EGL 配置选择器相关的崩溃问题 似乎通过调用请求 RGB 565setEGLConfigChooser 5 6 5 0 16 0 应该是最受支持的 然而 使用
  • 上课需要记忆吗?

    class Test int x int main cout lt lt sizeof Test return 0 输出 4我只是想问 即使我没有创建 Test 类的任何对象 为什么它会打印 4 sizeof X 是字节数X创建时需要 致电
  • 使用 Apache AGE 制作最短路径

    我一直在阅读 Jasper Blues 的博客文章 使用 NEO4J 进行摇滚式流量路由 https medium com neo4j rock n roll traffic routing with neo4j 3a4b863c6030但
  • 我应该如何在 axios GET 请求中发送 JWT 令牌? [复制]

    这个问题在这里已经有答案了 我是 Vue js 新手 想要在组件中向受限 api 发出请求 computed token return this store getters getToken created axios get this B
  • 函数构造函数和原型构造函数有什么区别?

    我想知道这有什么区别 MyClass function MyClass prototype Foo function and this MyClass MyClass prototype constructor function MyCla
  • 如何在androidsharedPreference中存储类对象?

    我想将类对象存储在android共享首选项中 我对此进行了一些基本搜索 得到了一些答案 例如使其可序列化对象并存储它 但我的需求非常简单 我想存储一些用户信息 例如姓名 地址 年龄和布尔值是否处于活动状态 我为此创建了一个用户类 publi
  • asp.net mvc 按名称和区域查找控制器

    我的目标是从控制器的名称和区域中找到控制器 如果我当前的httpContext与待找到的控制器位于同一区域内 但是 我无法拨打电话ControllerFactory考虑面积 这是我的代码 public static ControllerBa
  • 匹配 JavaScript 中除特定模式之外的所有内容

    经过多次搜索 我仍然感到困惑 如何匹配字符串中除与给定模式匹配的内容之外的所有内容 我找到了使用以下方法否定特定单词或字符集的解决方案 或负面展望 但我需要一个解决方案来否定任何与特定模式匹配的内容 示例文本 html 片段 abcd ef
  • java.lang.IllegalStateException:指定的子级已经有父级

    当我第一次实例化一个片段时 我正在使用片段 但第二次我遇到了这个例外 我找不到出错的行 04 04 08 51 54 320 E AndroidRuntime 29713 FATAL EXCEPTION main 04 04 08 51 5
  • GPU 上非原子写入的保证很弱吗?

    OpenCL 和 CUDA 包含原子操作已有好几年了 尽管显然并非每个 CUDA 或 OpenCL 设备都支持这些操作 但是 我的问题是关于由于非原子写入而 共存 种族的可能性 假设网格中的多个线程都写入全局内存中的同一位置 我们是否可以保
  • Swing 如何以编程方式关闭 JPanel

    我的主类扩展了 JPanel 我在这个面板上创建了一个表格和一个按钮 现在我想在用户按下它时关闭这个面板 互联网上的关闭示例是关于 JFrame 的 JPanel 有解决方案吗 有一个面板 面板上有一个表格和一个按钮 我向按钮添加一个动作侦
  • 上传图片并上传后查看

    我正在尝试在 Angular 5 2 和 Laravel 5 5 中上传个人资料图片 我可以成功地将图像上传到本地存储中的单独文件夹 然后我想像在 Facebook 中一样显示上传的图像 然后我可以查看上传的图像 但它没有上传到文件夹 这是
  • Django - 新字体?

    如何使用 Django 安装新字体 文档中没有提及这一点 我将字体安装在静态文件夹中 例如 fonts abc ttf 例如 在模板中 如果这是一个 CSS 我会这样链接它 但这不是 CSS 而且我还没有找到任何有关如何执行此操作的资源 我
  • Java 中的最终接口?

    Java中的接口可以声明为final吗 接口是 100 抽象的 创建接口实例的唯一方法是实例化实现它的类 允许接口final完全没有意义 EDIT这些问题并不像我最初想象的那么令人震惊 最终接口是不能由其他接口扩展但表面上可以实现的接口 我
  • Google 电子表格脚本问题 - 错误:服务超时:Apps 脚本

    我一直在尝试编写一个快速的谷歌脚本来计算婚礼邀请回复电子表格的回复人数 随着新条目添加到电子表格中 该脚本完美运行了一周 然后突然停止工作 每个单元格中出现以下错误消息 错误 服务超时 Apps 脚本 脚本本身很简单 它查询相关列 有多个事
  • Google App Engine 尝试访问开发数据

    我在本地计算机上运行我的应用程序 并使用远程 API 访问生产端的数据存储区 一切都工作得很好 直到我尝试在谷歌应用程序引擎启动器中添加第二个应用程序 我相信这就是导致问题的原因 因为我必须将我正在处理的内容与一些更新的代码合并 并想在我去
  • 如何在 Flutter 中单击另一个扩展图块后折叠已打开的扩展图块?

    我在我的应用程序中使用多个扩展图块 我需要在单击另一个图块后关闭已打开的图块 我尝试过使用默认情况下具有该功能的扩展面板 但我需要重新设计扩展瓷砖 所以我使用扩展瓷砖 如何在扩展磁贴中实现该功能 这个答案在 GitHub 上 https g
  • 如何使用“pip install”运行单元测试?

    在工作中 我们正在考虑配置本地 pypi 存储库以用于内部软件部署 使用 pip install 进行部署会很方便 但我担心添加新包后应该执行单元测试以确保正确安装 我一直认为 pip 正在这样做 但我在 pip 文档中没有看到任何与测试相
  • Phonegap Android 项目适用于模拟器,不适用于实际手机

    我正在运行最新版本的android及其SDK 并且我正在使用phonegap创建移动应用程序 我的问题是 我正在请求 Web 服务 并且在 html 的标签中显示收到的消息的内容 Web 服务工作正常 显示功能工作正常 甚至在模拟器上运行也
  • javascript字符串分割中的正则表达式,浏览器兼容性问题

    我一直在调查这个问题 随着我深入研究 这个问题似乎只会变得更糟 我开始天真地尝试使用这个表达式来分割 HTML br 标签上的字符串 T captions innerHTML split