我在JS中有一个正则表达式
const messageArray = message.split (/(? & lt; ! r) n/通用)
下面是我的"留言"。
'Hello, please can you send £100.00 to MNBVCXZLSTERIA1 on 04/08/21 nnhttps://www.co-operativebank.co.uk/help-and-support/faqs/accounts/savings/isas/ rnwhat-happens-if-i-put-too-much-money-in-my-cash-isa/PROD-2740 nnThank you'
正如你在上面看到的,我在链接中接收rn值,这是一个新的行字符,因此它无法识别链接并显示在多行中。
但是上面的regex将此转换为chrome中的链接正确,但在safari中不工作,因为向后看/向前看。
花了一些时间想一个好的解决办法,但没有找到。了解吗?
谢谢!
您可以使用match
代替split
,然后在用rn?
分隔时匹配多行文本。
下面是一个包含原始方法和建议方法的代码片段:
const message = 'Hello, please can you send £100.00 to MNBVCXZLSTERIA1 on 04/08/21 nnhttps://www.co-operativebank.co.uk/help-and-support/faqs/accounts/savings/isas/ rnwhat-happens-if-i-put-too-much-money-in-my-cash-isa/PROD-2740 nnThank you';
// With look-behind
const messageArray = message.split(/(?<!r)n/gm);
console.log(messageArray);
// Without lookbehind
const messageArray2 = message.match(/^.*$(rn?.*$)*/gm);
console.log(messageArray2);
输出结果相同。
假设rn
仅在链接内,n
仅在链接外,您可以首先通过删除rn
来恢复链接,然后通过n
分割:
const input = 'Hello, please can you send £100.00 to MNBVCXZLSTERIA1 on 04/08/21 nnhttps://www.co-operativebank.co.uk/help-and-support/faqs/accounts/savings/isas/ rnwhat-happens-if-i-put-too-much-money-in-my-cash-isa/PROD-2740 nnThank you';
let result = input.replace(/ *rn/g, '').split(/n/);
console.log(result);
输出:
[
"Hello, please can you send £100.00 to MNBVCXZLSTERIA1 on 04/08/21 ",
"",
"https://www.co-operativebank.co.uk/help-and-support/faqs/accounts/savings/isas/what-happens-if-i-put-too-much-money-in-my-cash-isa/PROD-2740 ",
"",
"Thank you"
]
注意:要删除空数组项,你可以这样做:.split(/n+/)