javascript - 当文本被引号包围时,Javascript 正则表达式用新行拆分字符串
问题描述
我想在split
引用文本时使用字符串方法来拆分字符串。例如,我想要这个字符串:
Some text
"This is what
I want to catch"
Some more text
变成一个字符串数组如:
0: "Some text"
1: "This is what↵I want to catch"
2: "↵↵Some more text"
为此,我呼吁:
inputText.split(/"((.+)|\s)+"/)
这不起作用,因为它创建了数组:
0: "Some text"
1: "I want to catch"
2: "I want to catch"
3: "↵↵Some more text"
知道如何实现我想要的吗?
我不能使用后视和前瞻,因为我仍然希望引号成为匹配的一部分。我的目标是在文本被引号包围时拆分字符串,但数组中没有引号本身。
解决方案
根据需要,您可以在以下位置使用此正则表达式split
:
/\n*(?:"([^"\\]*(?:\\.[^"\\]*)*)")?\n+/
正则表达式解释:
\n*
: 匹配 0+ 换行符(?:
:启动非捕获组"
: 比赛开场"
(
: 开始捕获组[^"\\]*
: 匹配 0+ 的任何非"
和非字符\
(?:\\.[^"\\]*)*
: 匹配一个转义字符,后跟 0+ 的任何非"
和非字符\
。重复此组 0 次或多次
)
: 结束捕获组 #1"
: 比赛结束"
)?
:结束非捕获组。?
使该组可选\n+
: 匹配 1+ 换行符
代码:
const s = `Some text
"This is what
I want to catch"
Some more text`
var m = s.split(/\n*(?:"([^"\\]*(?:\\.[^"\\]*)*)")?\n+/)
console.log(m)
或者,您可以在 Javascript 中使用此正则表达式来匹配带引号的字符串,该字符串也允许转义引号:
/"[^"\\]*(?:\\.[^"\\]*)*"|[^"\n]+/g
正则表达式解释:
"
: 比赛开场"
[^"\\]*
: 匹配 0+ 的任何非"
和非字符\
(?:\\.[^"\\]*)*
: 匹配一个转义字符,后跟 0+ 的任何非"
和非字符\
。重复此组 0 次或多次"
: 比赛结束"
|
: 或者[^"\n]
: 匹配没有换行符的其他行或"
代码:
const s = `Some text
"This is what
I want to catch"
Some more text`
var m = s.match(/"[^"\\]*(?:\\.[^"\\]*)*"|[^"\n]+/g)
console.log(m)
推荐阅读
- ruby-on-rails - 如果某个值为空,如何从强参数中删除特定对象
- android - 使用代码页 CP437 US-ASCII android studio 将字符串发送到蓝牙打印机时如何将 UTF-8 字符串转换为字符串 US-ASCI 代码页 437
- javascript - 将 props 设置为子组件中的状态
- ruby-on-rails - Rails + Sidekiq:如何避免失败的作业阻塞和降低服务器速度?
- php - WooCommerce 产品:显示没有链接的产品类别术语名称
- python - ValueError:使用 AES256 解密时填充字节无效
- r - 无法在 R 3.6.1 下使用 conda 环境安装 bibliometrix
- react-native - 在 onpress 中出现 this.props.navigation.navigate 错误
- sql - 通过存储过程进行数据库插入和更新的 tSQLt 测试用例
- reactjs - React 404 页面不适用于 CSSTransition