用于JS Regex的后向/前向



我在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 &#163;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 &#163;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+/)

最新更新