问题描述
||
我的网页中有一个奇怪的问题,特别是带有从用户那里获取剪贴板的文本区域元素。
用户执行CTRL + V;然后我创建了一个事件以通过事件KeyUp获取数据。
...这很好...
但是,当我尝试按此文本区域的每个“行”进行划分时;开始问题...
输入可以类似于以下示例:
数据读取如下内容:
Row1 [0] [HT] Row1 [1] [LF] \“ Row2 [0]注释行1 [LF] Row2 [0]注释行2 \” [HT] Row2 [1]
哪里:
[HT]表示{Tab}
[LF]表示{换行}
我用:
var myData = document.getElementById(\"TextAreaElement\").value;
var vArray = myData.split(/\\n/);
但是这个数组给我3行...
有人知道任何解决方案或替代方法吗?
解决方法
您将获得包含三行的文本,在换行符上将其拆分,并获得包含三项的数组。似乎可行。 :)现在,您需要做的是将每个项目都放在一个标签上(=split1ѭ)拆分。
[编辑]
不,现在我明白你的意思了。使用这种拆分方法将无法到达那里。您将不得不解析字符串。字段值可以包含一个回车,在这种情况下,它将用双引号引起来。因此,当您仍然在一组引号内时,就必须解析该字符串,并且不要将其拆分。
, 关于\'。\'不匹配换行符的问题,在JS中,这样做的标准方法是
[\\S\\s]
,它将匹配任何内容。
看来您想为初学者做的所有事情都是通过制表符分割字符串,对吗?然后...
result = string.split(/\\t/)
然后,您将获得一个数组,其中每个行的数据都分开。请注意,这仅在您的数据中没有多余的错误标签时才有效。
无论使用哪种工具将信息放入剪贴板,在将其复制并由JS解析之前,实际上都应该进行一些转义。如果它不能执行此操作,那么实际上一切都可以进行-在那种情况下,您不能保证您的字符串不会包含双引号,制表符或任何其他可能用作分隔符的字符。
, 好吧,我找不到使用某些正则表达式或javascript方法的方法(我相信可以做到)。我以另一种方式拆分信息。
我使用AJAX将此信息发送到服务器并在VB中执行拆分。
在简历中:
我得到最大列(由选项卡分割)。
获取并评估选项卡数组的每个值。
如果以双引号开头,请尝试查找双引号的结尾(在此之前,将中间的双引号替换为唯一的文本)
每次评估原始数组的一个项目时,我都会删除每个项目(始终评估项目0)...
如果找到新行(该行的最终行),则仅删除上一行的“最终列”的文本。
希望对同样问题的人有所帮助。干杯。
这是代码:
Public Function TEST(ByVal pText As String) As String
Try
Dim vText As String = pText
Dim vArray As New ArrayList
vArray.AddRange(vText.Split(vbNewLine))
Dim vActualIndex As Integer = 0
Dim vMaxColumns As Integer = 0
For Each vArrayItem In vArray
If vArrayItem.Split(vbTab).Length > vMaxColumns Then
vMaxColumns = vArrayItem.Split(vbTab).Length
End If
Next
Dim vActualArray(vMaxColumns - 1) As String
vArray = New ArrayList
vArray.AddRange(vText.Split(vbTab))
Dim vLen As Integer = vArray.Count
Dim vNewArray As New ArrayList
vActualIndex = 0
Do While vArray.Count <> 0
If vArray(0).Split(vbNewLine).Length = 1 Then
vActualArray(vActualIndex) = vArray(0)
vActualIndex += 1
Else
If vArray(0).Split(vbNewLine)(0).ToString.StartsWith(\"\"\"\") Then
vArray(0) = Mid(vArray(0),2).Replace(\"\"\"\"\"\",\"*_IDIDIDUNIQUEID_*\")
If InStr(vArray(0),\"\"\"\" & vbNewLine) <> 0 Then
vActualArray(vActualIndex) = Mid(vArray(0),1,InStr(vArray(0),\"\"\"\" & vbNewLine) + 1)
vArray(0) = Mid(vArray(0),\"\"\"\" & vbNewLine) + 3)
vActualArray(vActualIndex) = vActualArray(vActualIndex).ToString.Replace(\"*_IDIDIDUNIQUEID_*\",\"\"\"\"\"\")
vArray(0) = vArray(0).ToString.Replace(\"*_IDIDIDUNIQUEID_*\",\"\"\"\"\"\")
vActualIndex += 1
GoTo Skip_remove
End If
vArray(0) = vArray(0).ToString.Replace(\"*_IDIDIDUNIQUEID_*\",\"\"\"\"\"\")
vActualArray(vActualIndex) = vArray(0)
vActualIndex += 1
Else
vActualArray(vActualIndex) = vArray(0).Split(vbNewLine)(0)
vActualIndex += 1
vArray(0) = vArray(0).ToString.Substring(vArray(0).Split(vbNewLine)(0).ToString.Length + 2)
GoTo Skip_remove
End If
End If
vArray.RemoveAt(0)
\'这是VB代码中的标签
跳过删除:
If vActualIndex >= vMaxColumns Then
vNewArray.Add(vActualArray)
ReDim vActualArray(vMaxColumns - 1)
vActualIndex = 0
End If
Loop
Catch ex As Exception
Return \"\"
End Try
End Function