使用正则表达式将 “:” 转换为 “ : ”,而不去除换行符

Use regex to convert ":" into " : " without stripping out line breaks

本文关键字:换行符 转换 正则表达式      更新时间:2023-09-26

我正在尝试在文本区域内使用正则表达式以去除或添加空格,这样每当它找到":"时,它就会转换为" : "(每侧添加一个空格)。

我目前有以下代码,它适用于此正则表达式站点,但Uncaught SyntaxError: Invalid regular expression: /(?='n)'s{0,}:'s{0,}(?<='n)/: Invalid group给我错误消息:

$('textarea[name="yaml"]').val(
  $('textarea[name="yaml"]').val().replace(/(?='n)'s{0,}:'s{0,}(?<='n)/ig,
    " : "));    

您遇到了问题,因为's匹配多种空格,包括您不想匹配的换行符。您看到错误是因为您正在使用浏览器中的 js 正则表达式引擎不支持的正则表达式功能。

要保留换行符,请尝试只使用 'x20 而不是 's ,即匹配单词空间的确切字符,而不仅仅是通用空格。只需执行以下操作就足够了:

$('textarea[name="yaml"]').val(
  $('textarea[name="yaml"]').val().replace(/'x20*:'x20*/g, " : ")
);

但是请注意,任何正则表达式解决方案也可以替换 YAML 值中真正的":",以及仅在空格无关紧要的地方替换。我不知道这是否是你想要的。

如下面的演示所示,string.replace(/:/g, ' : ')应该这样做:

var str = 'duufuduiure:0ee938:'ndjiedj'n'r:dhdhhiekd'r'ndjdfd;:';
$('pre.before').text( str );
$('pre.after').text( str.replace(/:/g, ' : ') );
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
before: <pre class="before"></pre>
after: <pre class="after"></pre>

如果您还使用 m 多行标志,则可以使用输入字符的$结尾来帮助解决此问题。

var foo = "Hello world   : 'nmore text here";
foo.replace(/'s*:'s*$/igm, ' : ');
/* console output: 
> "Hello world : 
> more text here"
*/